Почему ProcessPoolExecutor работает поочередно? - PullRequest
1 голос
/ 25 апреля 2020
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 l oop, аналогично MatLab, например:

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

Что я получаю: все os.getpid одинаковы и выполнение происходит поочередно. Любая помощь?

Windows, VSCodium / VSCode, Python 3.7.3

1 Ответ

1 голос
/ 25 апреля 2020

Как уже упоминалось @Klaus, нужно изменить с executor.submit(parInnerLoop(itemNo)) на executor.submit(parInnerLoop, itemNo).

...