Python请求非阻塞?

Jef*_*eff 9 python python-requests

可能重复:
Python请求的异步请求

python模块请求是非阻塞的吗?我没有在文档中看到有关阻止或非阻塞的任何内容.

如果它是阻塞的,你会建议哪个模块?

aba*_*ert 42

喜欢urllib2,requests是阻止.

但我也不建议使用另一个库.

最简单的答案是在单独的线程中运行每个请求.除非你有数百个,否则这应该没问题.(多少数百个太多取决于您的平台.在Windows上,限制可能是您拥有的线程堆栈内存;在大多数其他平台上,截止时间更早.)

如果你做的有几百个,你可以把它们放在一个线程池.本ThreadPoolExecutorconcurrent.futures的网页几乎正是你需要的; 只需更改对urllib通话的requests呼叫.(如果您使用的是2.x,请使用futuresPyPI上相同软件包的backport.)缺点是您实际上并不是一次启动所有1000个请求,而是第一个,例如8.

如果你有数百个,并且它们都需要并行,这听起来像是一份工作gevent.让它monkeypatch一切,然后编写你用线程写的完全相同的代码,但产生greenlets而不是Threads.

grequests,直接从旧的异步支持演变而来requests,有效地为你做了gevent+ requests包装.对于最简单的情况,它很棒.但对于任何非平凡的事情,我发现阅读显式gevent代码更容易.你的旅费可能会改变.

当然,如果你需要做的事情真的看中了,你可能想去twisted,tornadotulip(或等待几个月tulip是STDLIB的一部分).

  • +1优秀答案!这有很大帮助. (2认同)