Многопроцессорная обработка Python завершается неудачно, когда я пытаюсь запустить функции в других файлах - PullRequest
0 голосов
/ 29 сентября 2019

Я пытаюсь обрабатывать некоторые данные параллельно, используя модуль multiprocessing . Все отлично работает, когда у меня был весь код в одном файле. Я решил разделить код на отдельные файлы (все в одном каталоге), но многопроцессорная обработка больше не работает. Не могли бы вы мне помочь?

Это минимальный рабочий пример. Весь код находится в одном файле.

foo.py

from multiprocessing import Process, Queue

def process_data( q, msg1, msg2 ):
    q.put( [ msg1, msg2 ] )

if __name__ == '__main__':

    q = Queue()
    p = Process( target=bar.run, args=( q, "Hello", "World" ) )
    p.start()

    result = q.get()
    print( result )
    p.join()

Вот пример нерабочий . Функция process_data теперь находится в другом файле (bar.py), и кажется, что result = q.get() никогда не вернется! Оба файла находятся в одном каталоге:

bar.py:

def process_data( msg1, msg2 ):
    q.put( [msg1, msg2 ] )

foo.py:

from multiprocessing import Process, Queue
import bar

if __name__ == '__main__':

    q = Queue()
    p = Process( target=bar.process_data, args=( q, "Hello", "World" ) )
    p.start()

    result = q.get()
    print( result )
    p.join()

1 Ответ

0 голосов
/ 29 сентября 2019

Ваша process_data функция, описанная в bar.py, имеет только 2 аргумента (msg1, msg2), но должна иметь 3 аргумента (q, msg1, msg2), потому что когда вы создаете процесс, вы передаете ему эти 3 аргумента:

p = Process( target=bar.process_data, args=( q, "Hello", "World" ) )

Просто измените определение функции process_data в bar.py на:

def process_data( q, msg1, msg2 ): q.put( [msg1, msg2 ] )

...