Is the python module Requests不阻塞?我在文档中没有看到有关阻止或非阻止的任何内容。
如果被阻止,您将建议使用哪个模块?
最佳答案
像urllib2
一样,requests
也处于阻塞状态。
但是我也不建议使用其他库。
最简单的答案是在单独的线程中运行每个请求。除非您有数百个,否则应该没问题。 (数百个太多取决于您的平台。在Windows上,限制可能是线程堆栈拥有的内存数量;在大多数其他平台上,此限制更早出现。)
如果确实有数百个,则可以将它们放入线程池中。 ThreadPoolExecutor
页面中的 concurrent.futures
Example几乎正是您所需要的。只需将urllib
调用更改为requests
调用即可。 (如果您使用的是2.x,请使用 futures
,即PyPI上相同软件包的backport。)不利之处是您实际上并没有立即启动所有1000个请求,只是第一个请求(例如8)。
如果您有数百个,并且它们都需要并行运行,那么这听起来像 gevent
的工作。让它猴子补丁所有内容,然后编写与线程编写的代码完全相同的代码,但是生成greenlet
而不是Thread
。
grequests
直接从requests
中的旧异步支持中发展而来,可以有效地为您完成gevent
+ requests
包装。在最简单的情况下,它很棒。但是对于任何不平凡的事情,我发现阅读显式的gevent
代码更加容易。你的旅费可能会改变。
当然,如果您需要做一些真正想做的事情,则可能需要转到twisted
,tornado
或tulip
(或等待几个月,让tulip
成为stdlib的一部分)。
关于Python请求非阻塞?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14245989/