gpt4 book ai didi

python - 多处理共享值进程和循环

转载 作者:行者123 更新时间:2023-12-01 02:48:45 26 4
gpt4 key购买 nike

我很难理解 python 多处理中的两件事。我已经研究了文档但仍然不明白:

  1. 如何在n循环中启动和加入进程(非重复代码,不知道我是否需要在Process循环中做任何特殊的事情)
  2. 如何将每个进程的结果添加到列表中。

目的:分解一个巨大的列表并单独运行每个 block 以获得更快的运行时间。

queue = Queue()

def filter(aBigList, startV, endV, startP, endPr, minV):

chunks = list(split(aBigList, 6))

p1 = Process(target=func1, args=(chunks[0], startP, endPr))
p2 = Process(target=func1, args=(chunks[1], startP, endPr))
p3 = Process(target=func1, args=(chunks[2], startP, endPr))
p4 = Process(target=func1, args=(chunks[3], startP, endPr))
p5 = Process(target=func1, args=(chunks[4], startP, endPr))
p6 = Process(target=func1, args=(chunks[5], startP, endPr))

p1.start()
p2.start()
p3.start()
p4.start()
p5.start()
p6.start()

#wait for all processes to finish
p1.join()
p2.join()
p3.join()
p4.join()
p5.join()
p6.join()

print(queue)

def func1(subList, startP, endPr):

for i in subList:
price = ind.getPrice(i) #returns a price of argument element
if startP <= float(price) <= endPr:
print("added")
queue.put(i)

最佳答案

使用工作池

python multiprocessing 标准库提供了 nice class that can be very helpful对于此用例:multiprocessing.Pool。它将为您管理许多工作人员,您只需发送工作单元以使其根据需要完成即可。这是您的代码,适合使用池而不是手动创建自己的进程。

PROCESS_COUNT = 6

def filter_list(aBigList, startV, endV, startP, endPr, minV):
list_chunks = list(chunks(aBigList, PROCESS_COUNT))

pool = multiprocessing.Pool(processes=PROCESS_COUNT)

for chunk in list_chunks:
pool.apply_async(func1, (chunk, startP, endPr))

pool.close()
pool.join()

while not queue.empty():
print(queue.get())

此外,chunks 函数可以简单地写为 borrowed from this answer.

def chunks(l, n):
for i in range(0, len(l), n):
yield l[i:i + n]

关于python - 多处理共享值进程和循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45022172/

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