我知道奇怪的标题,但这正是我所看到的。我正在尝试使用多处理模块从派生进程(Mac OSX)中运行请求(2.13.0)命令。我也碰巧在运行于python 3.7的代码(1.15.1)中使用了numpy。这是我的观察结果(请参见下面的代码):
1)不导入numpy:一切正常 2)导入numpy后:分叉进程开始时代码崩溃。给出的消息是: objc [45539]:调用fork()时,可能在另一个线程中正在进行+ [__ NSPlaceholderDate初始化]。 objc [45539]:调用fork()时,可能在另一个线程中正在进行+ [__ NSPlaceholderDate初始化]。我们不能在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')