pythonurllib不支持PyQt+多处理

2024-09-24 04:17:25 发布

您现在位置:Python中文网/ 问答频道 /正文

一个简单的代码:

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提取库,比如beauthulsoup、Requests或Pyquery)。我的MAC电脑在我的日志上崩溃了)


Tags: importcomhttpdatatimedefwwwmp
2条回答

这可能是由于_scproxy.get_proxies()在Mac上不安全。在

这里是https://bugs.python.org/issue33725#msg329926

_scproxy has been known to be problematic for some time, see for instance Issue31818. That issue also gives a simple workaround: setting urllib's "no_proxy" environment variable to "*" will prevent the calls to the System Configuration framework.

这是urllib可能试图做的事情,导致多处理时失败。在

有一个解决方法,就是将环境变量no-proxy设置为*

例如export no_proxy=*

这是真的。它总是在Mac上失败,我浪费了好几天来解决这个问题。老实说,目前还没有解决办法。最好的方法是使用线程而不是进程,它将像一个魅力。在

顺便说一句-

r = requests.get('http://www.gpsbasecamp.com/national-parks')

以及

^{pr2}$

做一件同样的事。你为什么要做两次?在

相关问题 更多 >