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代码更加容易。你的旅费可能会改变。

当然,如果您需要做一些真正想做的事情,则可能需要转到twistedtornadotulip(或等待几个月,让tulip成为stdlib的一部分)。

关于Python请求非阻塞?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14245989/

10-17 02:21