我正在研究一个涉及大量数值数据的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)
还有其他方法可以在我的情况下实现并行处理吗? 独立计算的数量以千计。
答案 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, ))