Python线程循环执行但线程数最大

use*_*621 3 python multithreading for-loop

现在,我有一个for循环遍历列表的循环,通常此列表的长度为100-500。在for循环中,每个项目都会打开一个新线程。所以现在我的代码看起来像这样:

    threads = []
    for item in items:
        t = threading.Thread(target=myfunction, args=(item,))
        threads.append(t)
        t.start()
Run Code Online (Sandbox Code Playgroud)

但是我不想每个线程都启动一个新线程,因为每个线程最多只需要花费几秒钟即可执行myfunction。我仍然想做我的循环,在参数中的每个项目上调用myfunction。但是一旦完成就关闭线程,并允许另一个线程接管。我要打开的最大线程数不小于3,不大于20。尽管更简单,但该范围可以变化。我只是不想在循环中的每个项目上打开一个新线程。

对于那些好奇的人,如果重要的话。myfunction是我定义的函数,它使用urllib将发布请求发送到站点。

我是python的新手,但不是一起编码的新手。对不起,菜鸟问题。

tex*_*ell 5

我认为您正在寻找线程池来解决您的问题。

对这些问题的答案这个问题的详细一些可能的解决方案。

最简单的一种(假设python3或pypi中的backport )是:

from concurrent.futures import ThreadPoolExecutor

executor = ThreadPoolExecutor(max_workers=10)
futures = []
for item in items:
    a = executor.submit(myfunction, item)
    futures.append(a)
Run Code Online (Sandbox Code Playgroud)

这将使用10个线程对所有项目执行myfunction。您稍后可以使用期货列表等待通话完成。