为什么ProcessPoolExecutor连续工作?

问题描述 投票:1回答:1
from concurrent.futures import ProcessPoolExecutor
import os
import time

def parInnerLoop(item):
    print(f'Processing {os.getpid()} started on {item}')
    time.sleep(3)
    print(f'Processing {os.getpid()} done on {item}')

def main():
    executor = ProcessPoolExecutor(max_workers=4)

    for itemNo in range(10):
        executor.submit(parInnerLoop(itemNo))

if __name__ == '__main__':
    main()

我想实现的是并行for循环,类似于MatLab,例如:

parfor itemNo = 0:9
    parInnerLoop(itemNo);
end

我得到的是:所有os.getpid都相同,并且执行顺序发生。有帮助吗?

Windows,VSCodium / VSCode,Python 3.7.3

python parallel-processing concurrent.futures
1个回答
1
投票

如@Klaus所述,需要从executor.submit(parInnerLoop(itemNo))更改为executor.submit(parInnerLoop, itemNo)

© www.soinside.com 2019 - 2024. All rights reserved.