我已经使用 Python requests 库有一段时间了,最近需要异步地发出请求,也就是说,我想发送 HTTP 请求后,让我的主线程继续执行,并在请求返回时调用回调函数。
自然而然,我找到了 grequests 库(https://github.com/kennethreitz/grequests),但我对它的行为感到困惑。例如:
import grequests
def print_res(res):
from pprint import pprint
pprint (vars(res))
req = grequests.get('http://www.codehenge.net/blog', hooks=dict(response=print_res))
res = grequests.map([req])
for i in range(10):
print i
以上代码将产生以下输出:
<...large HTTP response output...>
0
1
2
3
4
5
6
7
8
9
显然,grequests.map()调用会阻塞直到HTTP响应可用。我似乎误解了这里的“异步”行为,而grequests库只是用于同时执行多个HTTP请求并将所有响应发送到单个回调函数。这准确吗?
urllib
模块,并在后台线程中使用thread
模块运行它? - Aya