mat*_*ter 5 concurrent.futures python-multiprocessing
从线程到进程,我已切换到并发。futures,并且希望获得/保留在各种情况下在 aThreadPoolExecutor
和 a之间切换的灵活性ProcessPoolExecutor
。然而,尽管承诺有一个统一的外观,但当我切换到使用时,我很难将多处理Queue
对象作为参数传递:futures.submit()
ProcessPoolExecutor
import multiprocessing as mp\nimport concurrent.futures\n\ndef foo(q):\n q.put('hello')\n\nif __name__ == '__main__':\n\n executor = concurrent.futures.ProcessPoolExecutor()\n q = mp.Queue()\n p = executor.submit(foo, q)\n p.result()\n print(q.get())\n
Run Code Online (Sandbox Code Playgroud)\n遇到来自多处理代码的以下异常:
\n\n\nRuntimeError:队列对象只能通过继承在进程之间共享
\n
我认为这意味着它不喜欢接收队列作为参数,而是期望(不是在任何 OOP 意义上)在多处理分支上“继承它”,而不是将其作为参数获取。
\n不同之处在于,对于简单的多处理,这意味着当不通过并发.futures 为 \xe2\x80\x95 的外观使用它时,似乎没有这样的限制,因为以下代码可以无缝工作:
\nimport multiprocessing as mp\n\ndef foo(q):\n q.put('hello')\n\nif __name__ == '__main__':\n q = mp.Queue()\n p = mp.Process(target=foo, args=(q,))\n p.start()\n p.join()\n print(q.get())\n
Run Code Online (Sandbox Code Playgroud)\n我想知道我在这个 \xe2\x80\x95 中缺少什么,如何ProcessPoolExecutor
在使用并发.futures 时接受队列作为参数,就像使用 or ThreadPoolExecutor
multiprocessing 时一样直接如上所示?
归档时间: |
|
查看次数: |
1561 次 |
最近记录: |