【发布时间】:2013-04-07 14:25:28
【问题描述】:
我已经使用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模块的后台线程中运行它? -
我想我可能不得不这样做。我只是很困惑,想验证预期的行为。
-
当然。我只是倾向于尽可能地坚持使用内置插件以最大限度地提高便携性。
标签: python python-requests gevent grequests