Модуль запрашивает сбой Python при загрузке NumPy и использования процесса - PullRequest
0 голосов
/ 25 августа 2018

Странное название я знаю, но это именно то, что я вижу. Я пытаюсь запустить команду запросов (2.13.0) из разветвленного процесса (Mac OSX), используя многопроцессорный модуль. Я также использовал numpy в моем коде (1.15.1), работающем на python 3.7. Вот мои наблюдения (см. Код ниже):

1) Без импорта numpy: все отлично работает 2) После импорта numpy: происходит сбой кода при запуске разветвленного процесса. Сообщение дано: objc [45539]: + [__NSPlaceholderDate initialize], возможно, выполнялся в другом потоке при вызове fork (). objc [45539]: + [__NSPlaceholderDate initialize], возможно, выполнялся в другом потоке при вызове fork (). Мы не можем безопасно вызвать его или проигнорировать в дочернем процессе fork (). Сбой вместо этого. Установите точку останова на objc_initializeAfterForkError для отладки.

3) Я мог бы заставить его работать снова, вызывая вызов запросов из основного процесса один раз перед запуском нового процесса (см. Раздел с комментариями в коде

).

4) В python 2.7 все работает нормально во всех случаях выше.

Пример минимального кода для воспроизведения:

from multiprocessing import Process
import requests
import numpy # remove this import and it works fine on 3.7

def _worker():
    full_url = "http://www.google.com"
    result = requests.get(full_url)
    print(result.text)
    return 0

def run():
    p=Process(target=_worker)
    p.start()
    p.join()

# Add these lines and the code works in 3.7 even with numpy imported
#try:
#    requests.get('http://www.google.com')
#except:
#    pass
run()
print('I am done')
...