gpt4 book ai didi

python - grequests 以什么方式异步?

转载 作者:IT老高 更新时间:2023-10-28 21:42:22 37 4
gpt4 key购买 nike

我已经使用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 请求并将所有响应发送到单个回调。这是准确的吗?

最佳答案

.map() 旨在并行运行多个 URL 的检索,并且确实会等待这些任务完成 (gevent.joinall(jobs))调用)。

使用 .send() 代替生成作业,使用 Pool instance :

req = grequests.get('http://www.codehenge.net/blog', hooks=dict(response=print_res))
job = grequests.send(req, grequests.Pool(1))

for i in range(10):
print i

如果没有池,.send() 调用仍将阻塞,但仅适用于 gevent.spawn() 调用它执行。

关于python - grequests 以什么方式异步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16015749/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com