不论执行者类型如何,都通过并发未来传递队列

问题描述

从线程到进程,我已经切换到current.futures,并且希望在各种情况下在ThreadPoolExecutorProcessPoolExecutor之间切换时获得/保持灵活性。但是,尽管承诺实现统一的外观,但是当我切换到使用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 (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...