我对如何多线程Python 2.7应用程序感到困惑。
我在下面提供了简化版的代码。本质上,迭代项目列表并调用函数。函数“edit_file”不是cpu或硬盘激烈,不返回值并编辑独立文件。也就是说,没有两个函数可以编辑同一个文件。
因此,这个应用程序可以使用多个线程。
复杂性是必须使用一组不同的参数,具体取决于项目的内容。参数集也会改变,并且本身就是另一个函数的输出。
items = ['alpha', 'bravo', 'charlie', ... , 'zulu']
for item in items:
if func(item) == 'a':
edit_file(item, parameter_set1)
else func(item) == 'b':
function(item, parameter_set2)
if another_variable > 0:
edit_file(item, parameter_set3)
如何多线程应用这样的应用程序?
答案 0 :(得分:0)
我认为edit_file
因其名称而受IO限制,因此它使其成为Python多线程的候选者。 CPU绑定计算不会,因为Python使用全局解释器锁,它一次只允许一个线程在Python进程中处于活动状态 - 但是另一个线程可以在IO中被阻塞时运行。
您可以在此处使用工作线程池:
from multiprocessing.pool import ThreadedPool
def process(item):
if func(item) == 'a':
edit_file(item, parameter_set1)
else func(item) == 'b':
function(item, parameter_set2)
if another_variable > 0:
edit_file(item, parameter_set3)
nThreads = 8 # number of concurrent threads
pool = ThreadedPool(nThreads)
pool.map(process, items)
pool.close()
(即使我认为function
应为edit_file
,我仍保持代码在过程中保持不变...)