繁体   English   中英

在单个线程中使用阻塞HTTP库和Python并发http请求

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM