gpt4 book ai didi

python - 如何限制线程池中线程的数量以实现无限迭代?

转载 作者:行者123 更新时间:2023-12-01 00:34:39 24 4
gpt4 key购买 nike

假设我们想要无限迭代所有自然数,并为每个数字打开一个线程,直到达到极限。由于有无限的自然数,这个列表就像一个生成器,那么我们如何在生成数字时限制打开线程的数量呢?

我正在尝试这样的事情:

from multiprocessing import Pool

def func(i):
""" Do something with i"""

p = Pool(10)
i = 0
while True:
p.imap_unordered(func,i)
i += 1

我尝试了许多其他不同的方法(线程池、信号量等),但它们似乎都忽略了线程的最大数量。我想做一些事情,打开 MAX_THREADS 个线程,每次线程完成时,它都会再次迭代并启动一个新线程。我怎样才能实现这个目标?

最佳答案

您想使用ThreadPoolExecutor 。构造函数的第一个参数是 max_workers,它确定它可以使用多少个线程。

所以你最终会得到这样的结果:

with ThreadPoolExecutor(max_workers=n) as pool:
future = pool.submit(function, *args)
future.result() # outputs result

返回值为Future ,因此您可以在 future 完成后访问结果。当 with block 结束时,ThreadPoolExecutor 会等待其所有工作线程完成,因此您可以在 block 结束后安全地访问结果。

<小时/>

下面是 ThreadPoolExecutor 的一个简单示例:

from concurrent.futures import ThreadPoolExecutor
from time import sleep

def fn(delay, result):
sleep(x)
print(result)

with ThreadPoolExecutor(max_workers=2) as pool:
pool.submit(fn, 3, "last")
pool.submit(fn, 1, "first")
pool.submit(fn, 1, "middle")
# This should output "first", then "middle", then "last"

关于python - 如何限制线程池中线程的数量以实现无限迭代?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57897259/

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