我正在开发一个涉及大量数值数据的Python应用程序。 在第一步中将数据分成组,然后可以独立计算组。
我尝试使用线程。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()
我也尝试了多处理。Process(( 但它所做的只是创建我的父进程而不是子进程的新实例(类似于线程的嵌入只是逐个进程替换线程(
在我的情况下,还有其他方法可以实现并行处理吗?独立计算的数量以千为单位。
在 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 上,您可以使用多处理。池类以达到相同的结果。
from multiprocessing import Pool
pool = Pool()
for item in items:
pool.apply_async(do_stuff, (item, ))