Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在内核之间分割python工作?(多处理库)_Python_Multiprocessing - Fatal编程技术网

如何在内核之间分割python工作?(多处理库)

如何在内核之间分割python工作?(多处理库),python,multiprocessing,Python,Multiprocessing,我有一个顺序函数,可以对列表进行排序并执行任务。例如(这不是实际的代码,但很容易理解) 因此,这过于简化了,但本质上这些列表非常大,而且执行顺序非常重要(例如,对于……中的行,),因此我想在系统上的可用内核之间拆分它们 有人能提出这样做的方法吗 从未使用过多处理库,但这可能是与python一起使用的最好方法。您正在寻找 编辑:正如Sidewaise在评论中指出的,最好使用以下模式: from contextlib import closing, cpu_count, Pool with clo

我有一个顺序函数,可以对列表进行排序并执行任务。例如(这不是实际的代码,但很容易理解)


因此,这过于简化了,但本质上这些列表非常大,而且执行顺序非常重要(例如,
对于……中的行,
),因此我想在系统上的可用内核之间拆分它们

有人能提出这样做的方法吗

从未使用过多处理库,但这可能是与python一起使用的最好方法。

您正在寻找

编辑:正如Sidewaise在评论中指出的,最好使用以下模式:

from contextlib import closing, cpu_count, Pool

with closing(Pool(processes=cpu_count())) as pool
    pass # do something

“执行顺序很重要”,如“需要按顺序完成”,如“不能在核心之间拆分”?一些工作可以拆分-例如,我认为您可以为每个
for
循环拆分工作。但是循环需要一个接一个地执行。@sidewaise您对每一行做了什么?这似乎是唯一一个可以真正并行化的部分,对吗?@dano是的,这是真的。每个循环只是以不同的方式清理列表数据。但我如何将其并行化?我是否需要将这些循环转换为利用
多处理库的函数?实际上,Kay,只是为了确认,是sublist_a、sublist_b等输入?例如,类似于调用
函数\u到\u进程\u a(子列表\u a)
子列表\u a
应该是可编辑的<代码>函数\u to\u进程\u a
获取一行作为参数,就像普通的一样。好的,太好了。现在我得到了
AttributeError:\uuu退出\uu
。知道为什么会发生这种情况吗?实际上,我尝试将
替换为Pool(processs=2)作为Pool
语句,替换为
Pool=Pool(processs=2)
,错误是不同的:
处理器:线程中的2异常线程-2:回溯(最近一次调用):文件“/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/threading.py”,第808行,在\uuuu bootstrap\u internal self.run()文件中,../2.7/lib/python2.7/threading.py“,第761行,在运行PicklingError:Can't pickle:attribute lookup u_内置函数失败
必须使用
从contextlib导入关闭
,然后在关闭时将
作为池关闭(池(进程=multiprocessing.cpu\u count())
。谢谢,你的回答基本上回答了这个问题。
from multiprocessing import Pool

def function_to_process_a(row):
    return row * 42 # or something similar

# replace 4 by the number of cores that you want to utilize
with Pool(processes=4) as pool:
    # The lists are processed one after another,
    # but the items are processed in parallel.
    processed_sublist_a = pool.map(function_to_process_a, sublist_a)
    processed_sublist_b = pool.map(function_to_process_b, sublist_b)
    processed_sublist_c = pool.map(function_to_process_c, sublist_c)
    processed_sublist_d = pool.map(function_to_process_d, sublist_d)
from contextlib import closing, cpu_count, Pool

with closing(Pool(processes=cpu_count())) as pool
    pass # do something