use*_*827 14 python multiprocessing
from multiprocessing import Pool
with Pool(processes=5) as p:
p.starmap(name_of_function, all_inputs)
Run Code Online (Sandbox Code Playgroud)
我有一段像上面这样并行执行函数的代码.假设all_inputs有10,000个元素,我想知道哪个元素正在执行,例如10,000个中的100个...有没有办法获得该索引?
其中的工作进程multiprocessing.Pool是一个实例Process,它保留一个内部计数器来标识自己,您可以将此计数器与OS进程ID一起使用:
import os
from multiprocessing import current_process, Pool
def x(a):
p = current_process()
print('process counter:', p._identity[0], 'pid:', os.getpid())
if __name__ == '__main__':
with Pool(2) as p:
r = p.map(x, range(4))
p.join()
Run Code Online (Sandbox Code Playgroud)
收益率:
process counter: 1 pid: 29443
process counter: 2 pid: 29444
process counter: 2 pid: 29444
process counter: 1 pid: 29443
Run Code Online (Sandbox Code Playgroud)
IIUC,您也可以传入索引。(从@user1767754 窃取设置)(如果这不是您要找的,请告诉我。)
from multiprocessing import Pool
arr = [1,2,3,4,5]
arr_with_idx = zip(arr, range(len(arr)))
def x(a, idx):
print(idx)
return a*a
with Pool(5) as p:
p.starmap(x, arr_with_idx)
Run Code Online (Sandbox Code Playgroud)
或者更简洁地说,使用 enumerate
from multiprocessing import Pool
arr = [1,2,3,4,5]
def x(idx, a): # different here
print(idx)
return a*a
with Pool(5) as p:
p.starmap(x, enumerate(arr))
Run Code Online (Sandbox Code Playgroud)
starmap 将解包每个元组,您可以打印出索引部分。
您可以使用current_process多处理中的方法.如果这不够准确,你甚至可以name使用a 传递进程uuid
from multiprocessing import current_process
def x(a):
print(current_process(), a)
return a*a
with Pool(5) as p:
p.map(x, [1,2,3,4,5]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1915 次 |
| 最近记录: |