如何在parallel.futures.ProcessPoolExecutor()中使用队列?

时间:2018-09-24 11:37:57

标签: queue python-3.6 concurrent.futures

免责声明:一般来说,我是Python新手。我对Go的使用经验很少,使用通道实现队列真的很容易。

我想知道如何在Python 3中使用ProcessPoolExecutor实现队列。

我希望我的N个进程访问单个队列,以便我可以通过主线程在队列中插入许多作业,然后这些进程将仅在队列中抓取这些作业。

或者是否有更好的方法在多个进程之间共享列表/队列。 (也许是工作队列/工人池?)

谢谢。

1 个答案:

答案 0 :(得分:1)

concurrent.futures为您完成 executor对象在内部实现了队列,因此,当您提交任务时,它们将被放入队列中,并且您的工作线程或工作进程会拾取并运行任务。

感觉好像“太容易了”,但这就是concurrent.futures的全部意义-消除了管理线程池或进程池,作业队列等的所有复杂性,因此您可以为之付出一些开销节省了大量时间和精力。

是这样的:

import concurrent.futures

def send_email(from, to, subject, message):
    # magic to send an email

executor = concurrent.futures.ProcessPoolExecutor()
future = executor.submit(send_email, 'me@example.com', 'you@example.com', 'Hi!', 'Nice to meet you')

一个简单的submit调用将您的函数及其参数包装到工作项中,放入队列中,并且在您创建执行程序时初始化的进程池将选择作业并运行他们。