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的新手,但不是一起编码的新手。对不起,菜鸟问题。
我认为您正在寻找线程池来解决您的问题。
对这些问题的答案这个问题的详细一些可能的解决方案。
最简单的一种(假设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。您稍后可以使用期货列表等待通话完成。