带有附加到列表的for循环的多处理

时间:2020-04-08 07:51:55

标签: python python-3.x multithreading

我有一个像这样的循环:

df = []
for i in range(50):
    if i <= 10:
        df.append(i)
    else:
        df.append(i+1000)

我想通过Multiprocessing来运行它,类似这样(这不起作用):

df = []
items = range(50)
def try_my_operation(item):
    if i <= 10:
        df.append(i)
    else:
        df.append(i+1000)

executor = concurrent.futures.ProcessPoolExecutor(10)
futures = [executor.submit(try_my_operation, item) for item in items]
concurrent.futures.wait(futures)

有人可以帮我吗?非常感谢!

1 个答案:

答案 0 :(得分:0)

使用多个进程执行代码的一种简单方法是使用multiprocessing.Pool建立一个工作池(根据计算机上可用的CPU内核数),然后map您的{ {1}}转到您要调用的函数:

items

输出:

import multiprocessing as mp                                                    

def try_my_operation(i):                                                        
    if i <= 10:                                                                 
        return i                                                                
    else:                                                                       
        return i + 1000                                                         

if __name__ == "__main__":                                                      
    items = range(50)                                                           
    with mp.Pool(processes=4) as pool:                                          
        df = pool.map(try_my_operation, items)                                  
    print(df)

请注意,为了避免并行进程之间共享状态的复杂性,我将函数更改为返回值,而不是附加到全局列表。