不确定如何在Python中处理多线程复杂函数

时间:2015-11-18 13:09:58

标签: python multithreading

我对如何多线程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)

如何多线程应用这样的应用程序?

1 个答案:

答案 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,我仍保持代码在过程中保持不变...)