python многопроцессорность порождает весь скрипт - PullRequest
0 голосов
/ 22 марта 2020

У меня проблемы с организацией моего сценария для использования многопроцессорной обработки. Кажется, что процессы порождаются, но он выполняет весь сценарий снова и снова. В этом примере он будет print("PREPARATION") постоянно. Я предполагаю, что моя проблема связана с организацией сценария.

import subprocess as sp
import multiprocessing


def func1():
   blah
   blah
   blah

def func2():
   blah
   blah
   blah

def derev_work(cmd):
    proc = sp.run(cmd)
    print(proc.stdout)

def main():

    print("PREPARATION")
    cmd_list = [[path_to_exe, arg1, arg2, arg3] for sheet in sortedsheets]

    if __name__=="__main__":
        print (multiprocessing.cpu_count())
        pool = multiprocessing.Pool(multiprocessing.cpu_count())

        results = []
        r = pool.map_async(derev_work, cmd_list , callback=results.append)
        r.wait()
        print(results)

    print("COMPLETION")

main()

1 Ответ

1 голос
/ 22 марта 2020

Вам нужно будет использовать идиому

if __name__ == "__main__":
   main()

.

Это очень четко объяснено в многопроцессорных документах :

Вместо этого нужно защитить «точку входа» программы, используя if __name__ == '__main__': следующим образом ...

...