如何在concurrent.futures.ProcessPoolExecutor()中使用队列?
How to use Queue in concurrent.futures.ProcessPoolExecutor()?
免责声明:总的来说,我是 Python 的新手。我对 Go 有一点经验,使用通道实现队列非常容易。
我想知道如何在 Python 中使用 ProcessPoolExecutor 实现队列 3.
我希望我的 N 个进程访问一个队列,这样我就可以通过主线程在队列中插入许多作业,然后进程将只获取队列中的作业。
或者如果有更好的方法在多个进程之间共享 list/queue。 (可能是工作队列/工作人员池?)
谢谢。
concurrent.futures
为您 做这件事。 executor
对象在内部实现了一个队列,因此当您提交任务时,它们会被放入队列中,您的工作线程或工作进程会选择作业并 运行 它们。
感觉好像是 "too easy",但这就是 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
调用获取您的函数及其参数,将它们包装到一个工作项中,将它们放入队列中,然后在您创建执行程序时初始化的进程池将挑选这些作业和 运行 他们。
免责声明:总的来说,我是 Python 的新手。我对 Go 有一点经验,使用通道实现队列非常容易。
我想知道如何在 Python 中使用 ProcessPoolExecutor 实现队列 3.
我希望我的 N 个进程访问一个队列,这样我就可以通过主线程在队列中插入许多作业,然后进程将只获取队列中的作业。
或者如果有更好的方法在多个进程之间共享 list/queue。 (可能是工作队列/工作人员池?)
谢谢。
concurrent.futures
为您 做这件事。 executor
对象在内部实现了一个队列,因此当您提交任务时,它们会被放入队列中,您的工作线程或工作进程会选择作业并 运行 它们。
感觉好像是 "too easy",但这就是 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
调用获取您的函数及其参数,将它们包装到一个工作项中,将它们放入队列中,然后在您创建执行程序时初始化的进程池将挑选这些作业和 运行 他们。