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