【发布时间】:2017-10-04 09:11:58
【问题描述】:
我有一个基本上运行无限循环的代码,并且在循环的每次迭代中我都会运行一些指令。其中一些指令必须“并行”运行,我通过使用多处理来完成。这是我的代码结构示例:
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() 函数,这可能就是你要找的
-
您可能想在循环外创建线程池。您可能想在 CPU 绑定线程的上下文中阅读 全局解释器锁。
标签: python multithreading