问题描述
从线程到进程,我已经切换到current.futures,并且希望在各种情况下在ThreadPoolExecutor
和ProcessPoolExecutor
之间切换时获得/保持灵活性。但是,尽管承诺实现统一的外观,但是当我切换到使用Queue
时,我仍然很难传递多处理futures.submit()
对象作为ProcessPoolExecutor
上的参数:
import multiprocessing as mp
import concurrent.futures
def foo(q):
q.put('hello')
if __name__ == '__main__':
executor = concurrent.futures.ProcessPoolExecutor()
q = mp.Queue()
p = executor.submit(foo,q)
p.result()
print(q.get())
遇到来自多处理代码的以下异常:
RuntimeError:队列对象仅应通过继承在进程之间共享
我相信这意味着它不喜欢接收队列作为参数,而是希望(在任何OOP方面都不是)在多处理派生中“继承”它,而不是将其作为参数。
曲解是使用裸机多处理,这意味着当不通过并发.futures是的外观使用它时-似乎没有这种限制,因为以下代码可以无缝工作:
import multiprocessing as mp
def foo(q):
q.put('hello')
if __name__ == '__main__':
q = mp.Queue()
p = mp.Process(target=foo,args=(q,))
p.start()
p.join()
print(q.get())
我不知道我会缺少什么-使用并发时如何使ProcessPoolExecutor
接受队列作为参数。功能与直接使用ThreadPoolExecutor
或多处理时的功能相同就像上面显示的一样?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)