如何解决这段代码是否可以在多个处理器上执行吗?
下面的代码是否是跨多个处理器(dfA_Train
和dfB_Train
是Pandas DataFrames列表)并行执行 func 的正确方法?
from multiprocessing import Pool
import itertools
def func(dfA,dfB,param):
L = []
...
return L #L is a list of dictionaries
if __name__ == "__main__":
dictList = []
for param in paramGrid:
with Pool(processes=8) as pool:
rslts = pool.starmap(func,zip(dfA_Train,dfB_Train,itertools.repeat(param)))
rslts = [item for subList in rslts for item in subList if item != []]
_ = [dictList.append(item) for item in rslts]
results = pd.DataFrame.from_dict(dictList) if dictList else None
似乎没有在超过1个proc中运行-单进程和多个proc之间没有加速。
解决方法
我相信multiprocessing.dummy
仅根据下面的文档在内部调用多个线程。当我们寻找线程时,显然会调用一个进程,其中每个线程都由全局解释器锁控制。 multiprocessing.Pool()
将是此处实现并行性的合适人选。与线程不同,Pool
对象为每个任务分配单独的进程。例如,请考虑以下示例。
https://docs.python.org/3/library/multiprocessing.html#module-multiprocessing.dummy
from multiprocessing import Pool
def worker_function(arg_1,arg_2):
print('do some work with arg_1 and arg_2')
work = (["A",5],["B",2],["C",1],["D",3])
proc_pool = Pool(<desired no. of processes>) # create a multi processing Pool
proc_pool.map(worker_function,work) # start parallel work
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。