Странное название я знаю, но это именно то, что я вижу. Я пытаюсь запустить команду запросов (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')