Python请求非阻塞?

2024-05-15 11:47:59 发布

您现在位置:Python中文网/ 问答频道 /正文

Possible Duplicate:
Asynchronous Requests with Python requests

python模块Requests是非阻塞的吗?我在文档中没有看到任何关于阻塞或非阻塞的内容。

如果是阻塞,您建议使用哪个模块?


Tags: 模块文档内容withrequests建议asynchronousduplicate
2条回答

就像urllib2requests正在阻塞。

但我也不建议用别的图书馆。

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

如果确实有数百个,则可以将它们放入线程池中。页面中的^{} Example几乎正是您所需要的;只需将urllib调用更改为requests调用。(如果您使用的是2.x,请使用^{},PyPI上相同包的后台端口。)缺点是,您实际上不会一次启动所有1000个请求,只是第一个请求,比如8。

如果你有数百个,而且它们都需要并行,这听起来像是一个^{}的工作。让它对所有内容进行monkeypatch,然后编写与用线程编写的代码完全相同的代码,但是生成greenlets而不是Threads

^{}是直接从requests中的旧异步支持演变而来的,它有效地为您进行了gevent+requests包装。对于最简单的情况来说,这很好。但是对于任何不重要的东西,我发现更容易阅读显式的gevent代码。你的里程可能不同。

当然,如果您需要做一些真正有趣的事情,您可能需要去twistedtornado,或者tulip(或者等待几个月tulip成为stdlib的一部分)。

它是阻塞的,但这让我想起一种整洁的小包装,我认识的人放在gevent周围,它落回eventlet,然后线程,如果这两个都不存在。您可以将函数添加到类似于dict或list的数据结构中,只要添加了函数,它们就会在后台执行,并且在函数执行完毕后,就可以使用函数返回的值来代替函数。是here

相关问题 更多 >