Py学习  »  Python

for循环中的Python多处理

Hash Line • 3 年前 • 1252 次点击  

我试图在我的程序中实现多处理。
最初,我写了这段代码。

pool = mp.Pool(mp.cpu_count())

for i in range(0, 10000):
    bid = i
    ask = i
    pool.apply_async(function1, args=(bid, ask,))
    pool.apply_async(function2, args=(bid, ask,))
    pool.apply_async(function3, args=(bid, ask,))
    pool.close()
    pool.join()

这给了我一个错误:

Python ValueError: Pool is still running

所以我修改了代码:

for i in range(0, 10000):
    bid = i
    ask = i
    pool = mp.Pool(mp.cpu_count())
    pool.apply_async(function1, args=(bid, ask,))
    pool.apply_async(function2, args=(bid, ask,))
    pool.apply_async(function3, args=(bid, ask,))
    pool.close()
    pool.join()

这根本不会执行&显示一个空白终端。

我试图实现的是,对于我想要并行运行3个函数的范围内的每一个值,只有在这3个函数被执行之后,它才应该移动到下一个 i 价值观 range(0,1000) .

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/130893
 
1252 次点击  
文章 [ 1 ]  |  最新文章 3 年前
user2668284 user2668284
Reply   •   1 楼
user2668284 user2668284    3 年前

以下是你可以适应的模式:

from concurrent.futures import ProcessPoolExecutor

def func1(a, b):
    pass

def func2(a, b):
    pass

def func3(a, b):
    pass

def main():
    with ProcessPoolExecutor() as executor: # work manager
        for i in range(1_000):
            futures = []
            for func in [func1, func2, func3]:
                futures.append(executor.submit(func, i, i))
            for future in futures:
                future.result() # wait for process to terminate

if __name__ == '__main__':
    main()