2024-05-15 11:47:59 发布
网友
Possible Duplicate:Asynchronous Requests with Python requests
python模块Requests是非阻塞的吗?我在文档中没有看到任何关于阻塞或非阻塞的内容。
如果是阻塞,您建议使用哪个模块?
就像urllib2,requests正在阻塞。
urllib2
requests
但我也不建议用别的图书馆。
最简单的答案是在单独的线程中运行每个请求。除非你有成百上千个,否则应该没问题。(多少个几百个太多了取决于你的平台。在Windows上,限制可能是线程堆栈的内存量;在大多数其他平台上,截止时间更早。)
如果确实有数百个,则可以将它们放入线程池中。页面中的^{} Example几乎正是您所需要的;只需将urllib调用更改为requests调用。(如果您使用的是2.x,请使用^{},PyPI上相同包的后台端口。)缺点是,您实际上不会一次启动所有1000个请求,只是第一个请求,比如8。
urllib
如果你有数百个,而且它们都需要并行,这听起来像是一个^{}的工作。让它对所有内容进行monkeypatch,然后编写与用线程编写的代码完全相同的代码,但是生成greenlets而不是Threads
greenlet
Thread
^{}是直接从requests中的旧异步支持演变而来的,它有效地为您进行了gevent+requests包装。对于最简单的情况来说,这很好。但是对于任何不重要的东西,我发现更容易阅读显式的gevent代码。你的里程可能不同。
gevent
当然,如果您需要做一些真正有趣的事情,您可能需要去twisted、tornado,或者tulip(或者等待几个月tulip成为stdlib的一部分)。
twisted
tornado
tulip
它是阻塞的,但这让我想起一种整洁的小包装,我认识的人放在gevent周围,它落回eventlet,然后线程,如果这两个都不存在。您可以将函数添加到类似于dict或list的数据结构中,只要添加了函数,它们就会在后台执行,并且在函数执行完毕后,就可以使用函数返回的值来代替函数。是here。
就像
urllib2
,requests
正在阻塞。但我也不建议用别的图书馆。
最简单的答案是在单独的线程中运行每个请求。除非你有成百上千个,否则应该没问题。(多少个几百个太多了取决于你的平台。在Windows上,限制可能是线程堆栈的内存量;在大多数其他平台上,截止时间更早。)
如果确实有数百个,则可以将它们放入线程池中。页面中的^{} Example 几乎正是您所需要的;只需将} ,PyPI上相同包的后台端口。)缺点是,您实际上不会一次启动所有1000个请求,只是第一个请求,比如8。
urllib
调用更改为requests
调用。(如果您使用的是2.x,请使用^{如果你有数百个,而且它们都需要并行,这听起来像是一个^{} 的工作。让它对所有内容进行monkeypatch,然后编写与用线程编写的代码完全相同的代码,但是生成
greenlet
s而不是Thread
s^{} 是直接从
requests
中的旧异步支持演变而来的,它有效地为您进行了gevent
+requests
包装。对于最简单的情况来说,这很好。但是对于任何不重要的东西,我发现更容易阅读显式的gevent
代码。你的里程可能不同。当然,如果您需要做一些真正有趣的事情,您可能需要去
twisted
、tornado
,或者tulip
(或者等待几个月tulip
成为stdlib的一部分)。它是阻塞的,但这让我想起一种整洁的小包装,我认识的人放在gevent周围,它落回eventlet,然后线程,如果这两个都不存在。您可以将函数添加到类似于dict或list的数据结构中,只要添加了函数,它们就会在后台执行,并且在函数执行完毕后,就可以使用函数返回的值来代替函数。是here。
相关问题 更多 >
编程相关推荐