一个简单的代码:
import urllib2
import requests
from PyQt4 import QtCore
import multiprocessing
import time
data = (
['a', '2'],
)
def mp_worker((inputs, the_time)):
r = requests.get('http://www.gpsbasecamp.com/national-parks')
request = urllib2.Request("http://www.gpsbasecamp.com/national-parks")
response = urllib2.urlopen(request)
def mp_handler():
p = multiprocessing.Pool(2)
p.map(mp_worker, data)
if __name__ == '__main__':
mp_handler()
基本上,如果我导入PyQt4,并且我有一个urllib请求(我相信这几乎在所有Web提取库中使用,例如BeautifulSoup,Requests或Pyquery。它会在我的MAC上使用神秘的日志崩溃)
答案 0 :(得分:0)
这是完全正确的。它总是在Mac上失败,我浪费了很多天才解决这个问题。说实话,目前还没有解决方案。最好的方法是使用Thread而不是Process,它将像魅力一样工作。
顺便说一下 -
r = requests.get('http://www.gpsbasecamp.com/national-parks')
和
request = urllib2.Request("http://www.gpsbasecamp.com/national-parks")
response = urllib2.urlopen(request)
做同一件事。你为什么两次这样做?
答案 1 :(得分:0)
这可能是由于_scproxy.get_proxies()
在Mac上不安全。
在这里https://bugs.python.org/issue33725#msg329926
已知_scproxy在一段时间内存在问题,请参见例如Issue31818。该问题还提供了一种简单的解决方法:将urllib的“ no_proxy”环境变量设置为“ *”将阻止对系统配置框架的调用。
这是urllib可能试图做的事情,导致多处理时失败。
有一种解决方法,那就是将环境变量no-proxy
设置为*
例如。 export no_proxy=*