我使用aiohttp来构建一个将TCP请求发送到单独服务器的API服务器。发送TCP请求的模块是同步的,并且是我的目的的黑盒子。所以我的问题是这些请求阻止了整个API。我需要一种将模块请求封装在异步协程中的方法,该协议不会阻塞其余的API。如何在异步协程中包装同步函数?
所以,仅仅用sleep
作为一个简单的例子,有没有办法以某种方式包裹在无阻塞协程耗时同步码,这样的事情:
async def sleep_async(delay):
# After calling sleep, loop should be released until sleep is done
yield sleep(delay)
return 'I slept asynchronously'
你总是在I/O块。通过合作性多任务处理,您无法获得所需的行为,因为阻止的协同程序仅在请求完成后才返回控制(收益)。 –
aiohttp适用于http。对于非http TCP,asyncio就足够了。 – Udi