Как инициализировать многопроцессорный процесс Python, цель которого не требует аргументов? - PullRequest
1 голос
/ 17 октября 2019

приблизительный код:

from multiprocessing import Process

def getPAprofilesPages():
    #do stuff here

def getPBprofilesPages():       
    #do stuff here

P1 = Process(target = getPAprofilesPages, args = [] )
P2 = Process(target = getPBprofilesPages, args = [] )

Обратите внимание, что функции не принимают аргументов. Я попытался установить args равными None, (), (,) и [], как показано выше, а также полностью опустить его при инициализации. В любом случае я получаю ту же ошибку при попытке запустить P1.start() или P2.start() в интерпретаторе:

>>> Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "C:\Users\******\AppData\Local\Programs\Python\Python37\lib\multiprocessing\spawn.py", line 105, in spawn_main
    exitcode = _main(fd)
  File "C:\Users\******\AppData\Local\Programs\Python\Python37\lib\multiprocessing\spawn.py", line 115, in _main
    self = reduction.pickle.load(from_parent)
AttributeError: Can't get attribute 'getPAprofilesPages' on <module '__main__' (built-in)>

1 Ответ

2 голосов
/ 17 октября 2019

Следующий код прекрасно работает в скрипте



def main():
    ...
    all your other code goes here
    ... 
    from multiprocessing import Process
    P1 = Process(target = getPAprofilesPages )
    P2 = Process(target = getPBprofilesPages )
    P1.start()
    P2.start()

def getPAprofilesPages():
    #do stuff here
    pass

def getPBprofilesPages():
    #do stuff here
    pass

if __name__ == '__main__':
    main()

Однако вы говорите, что запускаете его в интерпретаторе, и в этом ваша проблема в том, что вы не можете использовать многопроцессорный пакет в интерактивном Python .

Я знаю, что это не тот ответ, который вы искали, но он объясняет вашу ошибку. Вы можете прочитать больше в этой ссылке об обходном пути.

...