我有一个代码,它基本上运行了一个无限循环,并且在循环的每次迭代中运行一些指令。其中一些指令必须以“并行”方式运行,我通过使用多处理来执行。这里是我的代码结构的一个例子:Python:无限循环中的多线程
from multiprocessing import Pool
from multiprocessing.dummy import Pool as ThreadPool
def buy_fruit(fruit, number):
print('I bought '+str(number)+' times the following fruit:'+fruit)
return 'ok'
def func1(parameter1, parameter2):
myParameters=(parameter1,parameter2)
pool= Threadpool(2)
data = pool.starmap(func2,zip(myParameters))
return 'ok'
def func2(parameter1):
print(parameter1)
return 'ok'
while true:
myFruits=('apple','pear','orange')
myQuantities=(5,10,2)
pool= Threadpool(2)
data = pool.starmap(buy_fruit,zip(myFruits,myQuantities))
func1('hello', 'hola')
我同意这是一个有点乱,因为我有主回路内的多进程,而且内的功能。
所以一切正常,直到循环运行几分钟,我得到一个错误: “RuntimeError:无法启动新的线程”
我在网上看到,这是由于这样的事实,我有打开了太多的线程。
在每次循环迭代结束时关闭所有线程的最简单方法是什么,所以我可以在新循环迭代开始时重新启动“新鲜”?
预先感谢您的时间和帮助!
最佳, 朱莉娅
PS:本示例代码仅仅是一个例子,我真正的函数打开许多线程,每个回路和每一个功能需要几秒钟来执行。
查看Pool的_join()_函数,这可能是您正在寻找的内容 – Minato
您可能想要在循环外部创建线程池。您可能需要在CPU绑定线程的上下文中阅读_global解释器lock_。 – moooeeeep