相关疑难解决方法(0)

如何在异步协程中包装同步函数?

我正在使用aiohttp构建一个API服务器,将TCP请求发送到单独的服务器.发送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'
Run Code Online (Sandbox Code Playgroud)

python asynchronous python-3.x python-asyncio aiohttp

30
推荐指数
5
解决办法
1万
查看次数

如何在 python 3.8+ 中将函数转换为协程

正如这个问题中所述,我们可以使用装饰器asyncio.coroutine将函数转换为协程,如下所示:

def hello():
    print('Hello World!')

async_hello = asyncio.coroutine(hello)
Run Code Online (Sandbox Code Playgroud)

然而,从 python 3.8 开始,这个函数已被弃用(由 替代async def ...)。那么我们如何在 3.8+ 中做到这一点而不需要呢async def ...

python asynchronous python-3.x python-asyncio

2
推荐指数
1
解决办法
1863
查看次数