免责声明:一般来说,我是Python新手。我对Go的使用经验很少,使用通道实现队列真的很容易。
我想知道如何在Python 3中使用ProcessPoolExecutor实现队列。
我希望我的N个进程访问单个队列,以便我可以通过主线程在队列中插入许多作业,然后这些进程将仅在队列中抓取这些作业。
或者是否有更好的方法在多个进程之间共享列表/队列。 (也许是工作队列/工人池?)
谢谢。
答案 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
调用将您的函数及其参数包装到工作项中,放入队列中,并且在您创建执行程序时初始化的进程池将选择作业并运行他们。