【问题标题】:OSError: [WinError 87]The parameter is incorrectOSError: [WinError 87]参数不正确
【发布时间】:2018-02-05 17:06:25
【问题描述】:

我在一个python教程网站上学习分布式进程:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001431929340191970154d52b9d484b88a7b343708fcc60000#0

这是作为主进程运行的教程代码。

task_master.py

import random, time, queue
from multiprocessing.managers import BaseManager


task_queue = queue.Queue()
result_queue = queue.Queue()

class QueueManager(BaseManager):
    pass
    
QueueManager.register('get_task_queue', callable=lambda:task_queue)
QueueManager.register('get_result_queue', callable=lambda:result_queue)
manager = QueueManager(address=('',5000), authkey=b'abc')
manager.start()
task = manager.get_task_queue()
result = manager.get_result_queue()
for i in range(10):
    n = random.randint(0,10000)
    print('Put task %d...' %n)
    task.put(n)
print('Try get result...')
for i in range(10):
    r = result.get(timeout = 10)
    print('Result:%s'%r)
manager.shutdown()
print('master exit.')

代码没有完成,因为它引发了一些错误,当我绑定到我的计算机上运行它时,我不知道如何处理。

错误

D:\py>Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "C:\Users\Raven\AppData\Local\Programs\Python\Python36\lib\multiprocessing\spawn.py", line 99, in spawn_main
    new_handle = reduction.steal_handle(parent_pid, pipe_handle)
  File "C:\Users\Raven\AppData\Local\Programs\Python\Python36\lib\multiprocessing\reduction.py", line 82, in steal_handle
    _winapi.PROCESS_DUP_HANDLE, False, source_pid)
OSError: [WinError 87] The parameter is incorrect。

【问题讨论】:

    标签: python


    【解决方案1】:

    windows 中的多处理与 linux 不同 - 具体来说,windows 使用 spawn 而 linux 使用 fork(好吧,还有更多内容,但这是一个总结)。

    您正在学习的教程是根据提示在 linux 上编写的,而您在 windows 上。您可以告诉multiprocessing 使用spawn 而不是fork,如下所示:

    import random, time, queue
    import multiprocessing
    multiprocessing.set_start_method('spawn')
    
    from multiprocessing.managers import BaseManager
    

    这有帮助吗?

    【讨论】:

    • 感谢您的回答!我尝试用您的“导入”代码替换我的“导入”代码。它不起作用 C:\Users\xiangmu003\py>Traceback (最近一次调用最后一次): File "", line 1, in File "C:\Users\xiangmu003\AppData\Local\Programs \Python\Python36\lib\multiprocessing\spawn.py”,第 99 行,在 spawn_main new_handle = reduction.steal_handle(parent_pid, pipe_handle) 文件“C:\Users\xiangmu003\AppData\Local\Programs\Python\Python36\lib\ multiprocessing\reduction.py",第 82 行,steal_handle _winapi.PROCESS_DUP_HANDLE,False,source_pid) OSError: [WinError 87]
    • 这里也一样:我将multiprocessing.set_start_method('spawn') 添加到在macOS 中工作的代码中并得到了同样的错误。
    猜你喜欢
    • 2021-06-28
    • 1970-01-01
    • 2019-05-17
    • 1970-01-01
    • 2011-10-21
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    相关资源
    最近更新 更多