gpt4 book ai didi

queue - 如何在 concurrent.futures.ProcessPoolExecutor() 中使用队列?

转载 作者:行者123 更新时间:2023-12-03 23:54:00 26 4
gpt4 key购买 nike

免责声明 :总的来说,我是 Python 的新手。我对 Go 有一些小经验,使用 channel 实现队列非常容易。

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

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

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

谢谢。

最佳答案

concurrent.futures为你做这个。 executor object 在内部实现了一个队列,所以当你提交任务时,它们会被放入队列中,你的工作线程或工作进程会选择作业并运行它们。

可能感觉好像“太容易了”,但这就是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 call 接受您的函数及其参数,将它们包装到一个工作项中,将它们放入一个队列中,并且在您创建执行程序时初始化的进程池将挑选作业并运行它们。

关于queue - 如何在 concurrent.futures.ProcessPoolExecutor() 中使用队列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52478532/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com