gpt4 book ai didi

python - 执行没有多处理池映射的进程列表

转载 作者:太空宇宙 更新时间:2023-11-03 12:59:33 25 4
gpt4 key购买 nike

import multiprocessing as mp

if __name__ == '__main__':

#pool = mp.Pool(M)

p1 = mp.Process(target= target1, args= (arg1,))
p2 = mp.Process(target= target2, args= (arg1,))
...
p9 = mp.Process(target= target9, args= (arg9,))
p10 = mp.Process(target= target10, args= (arg10,))
...
pN = mp.Process(target= targetN, args= (argN,))

processList = [p1, p2, .... , p9, p10, ... ,pN]

我有 N 个不同的目标函数,它们执行时消耗的时间不等。

我正在寻找一种并行执行它们的方法,以便 M (1 < M < N) 个进程同时运行。一旦一个进程完成,下一个进程就应该从列表开始,直到 processList 中的所有进程都完成。

因为我没有调用相同的目标函数,所以我无法使用 Pool

我考虑过这样做:

    for i in range(0, N, M):
limit = i + M
if(limit > N):
limit = N
for p in processList[i:limit]:
p.join()

由于我的目标函数执行时消耗的时间不相等,因此这种方法效率不高。

有什么建议吗?提前致谢。

编辑:问题标题已从“执行没有多处理池的进程列表”更改为“执行没有多处理池映射的进程列表”。

最佳答案

您可以使用 proccess Pool :

#!/usr/bin/env python
# coding=utf-8

from multiprocessing import Pool
import random
import time


def target_1():
time.sleep(random.uniform(0.5, 2))
print('done target 1')

def target_2():
time.sleep(random.uniform(0.5, 2))
print('done target 1')

def target_3():
time.sleep(random.uniform(0.5, 2))
print('done target 1')

def target_4():
time.sleep(random.uniform(0.5, 2))
print('done target 1')


pool = Pool(2) # maximum two processes at time.
pool.apply_async(target_1)
pool.apply_async(target_2)
pool.apply_async(target_3)
pool.apply_async(target_4)
pool.close()
pool.join()

池是专门为您需要做的事情而创建的——在有限数量的进程中执行许多任务。

我也建议你看看concurrent.futures图书馆,它是backport to Python 2.7 .它有一个 ProcessPoolExecutor ,具有大致相同的功能,但它的方法返回 Future对象,并且它们有更好的 API。

关于python - 执行没有多处理池映射的进程列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27526853/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com