用于并行数值计算的python

时间:2014-12-18 06:49:29

标签: python multithreading multiprocessing

我正在研究一个涉及大量数值数据的python应用程序。在第一步中将数据分成组,然后可以独立计算组。

我尝试使用threading.Thread()但很快意识到它因gil而无用。

class vThread(Thread):
    def __init__(self,item):
        Thread.__init__(self)
        self.item = item

    def run(self):
        do_stuff()

vThreads = [] 

for item in items:
    vThreads.append(vThread(item))    
    for x in vThreads:
        x.start()

    for x in vThreads:
        x.join()

我也尝试过multiprocessing.Process()但它所做的只是创建我父进程的新实例而不是子进程(类似于线程的实现只是替换Thread by Process)

还有其他方法可以在我的情况下实现并行处理吗? 独立计算的数量以千计。

1 个答案:

答案 0 :(得分:0)

在Python3上,您可以使用concurrent.futures.ProcessPoolExecutor并行运行多个独立任务。

from concurrent.futures import ProcessPoolExecutor

with concurrent.futures.ProcessPoolExecutor() as executor:
    for item in items:
        executor.submit(do_stuff, item)

在Python2上,您可以使用multiprocessing.Pool类来获得相同的结果。

from multiprocessing import Pool

pool = Pool()

for item in items:
    pool.apply_async(do_stuff, (item, ))