[英]Concurrent http requests using a blocking http library with Python in a single thread
因此,我有一个要尝试以特定方式解决的问题,但是我不确定要实现多少困难。
我想使用Python 3.4的asyncio / coroutines功能,使用阻塞的http库(例如请求)或执行HTTP请求(例如aws的boto)的任何Python api触发许多并发的HTTP请求。
我知道在线程/进程中运行任务的run_in_executor()方法,但是我想避免这种情况。
我想在单线程中使用Linux / Unix内核中的那些选择功能来实现。
实际上,我正在关注David Beazley对此的介绍,并且正在尝试使用以下代码: https : //github.com/dabeaz/concurrencylive/blob/master/aserver.py
但没有Future / Pool内容,请使用我的Blocking-api调用代替计算斐波那契数。
简而言之,http请求似乎仍在按顺序运行。
有什么想法可能吗? 如何?
谢谢
不可能。 由于套接字处于阻塞模式,因此requests
库对基础套接字的所有调用都处于阻塞状态(即socket.read
)。 您可以将套接字置于非阻塞模式,但随后socket.read
将失败。 基本上,您需要一个事件循环来告诉您何时可以进行socket.read
,但是编写阻塞库并不是一个人在意的。 这就是asyncio
存在的全部原因。 提供不同库可以共享并利用非阻塞文件描述符(例如套接字)的默认事件循环。
使用aiohttp
,它和requests
一样简单 ,在此过程中,您将了解有关asyncio
更多信息。 asyncio
和新的Python 3.5 async/await
语法是网络IO的未来; 屈服(双关语意)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.