Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python请求非阻塞?_Python_Python Requests - Fatal编程技术网

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的数据结构中,一旦添加了函数,它们就会在后台执行,并且一旦执行完毕,从函数返回的值就可以替代函数。是的