使用urllib2.urlopen()加载URL而不等待响应

时间:2013-07-25 16:16:24

标签: python urllib2 urllib

我只想发送请求但不想浪费时间等待回复。因为回复对我来说毫无用处。 我抬头看了python doc,但是我找不到解决方案。 谢谢你的建议。 我试过用 urllib2.urlopen(url, timeout=0.02) 但我不确定该请求是否实际发出。

2 个答案:

答案 0 :(得分:4)

这称为异步加载,这里是blog post explaining how to do it with urllib2。示例代码:

#!/usr/bin/env python

import urllib2
import threading

class MyHandler(urllib2.HTTPHandler):
    def http_response(self, req, response):
        print "url: %s" % (response.geturl(),)
        print "info: %s" % (response.info(),)
        for l in response:
            print l
        return response

o = urllib2.build_opener(MyHandler())
t = threading.Thread(target=o.open, args=('http://www.google.com/',))
t.start()
print "I'm asynchronous!"

这将加载URL而不等待响应。

答案 1 :(得分:0)

实现异步函数调用的最简单方法是在自己的线程或子进程中使用callable。

http://docs.python.org/library/threading.html#threading.Thread
http://docs.python.org/library/multiprocessing.html#multiprocessing.Process

似乎有用于Python的HTTP库已经实现了这样的功能,但是,例如grequestsrequests-futures(两者都基于requests库,这是一个改进在API方面超过urllib2