创建异步函数的同步版本
项目描述
make-it-sync
这个非常简单的库可以帮助您为Python async
函数和类方法提供同步接口。
简介
from asyncio import sleep
from make_it_sync import make_sync
async def simple_func(a: int) -> int:
'Simple sleeper function to test calling mechanics'
await sleep(0.01)
return a + 1
t_wrap = make_sync(simple_func)
print (t_wrap(4))
# Prints out 5
它通过运行一个 async
事件循环并执行函数来实现。如果没有运行事件循环,它将使用当前线程,否则它将创建一个新线程并在那里运行函数。
特性
- 将包装独立的函数
- 传递所有参数(关键字和位置参数)
- 类上的实例方法可以被包装
- 抽象方法得到正确处理。
用法
安装 pip install make-it-async
。
make_sync
函数创建一个新的函数,该函数将调用您传递给它的函数
async def simple_func(a: int) -> int:
'Simple sleeper function to test calling mechanics'
await sleep(0.01)
return a + 1
t_wrap = make_sync(simple_func)
您可以像使用Python函数一样使用 t_wrap
。尽管将 make_sync
作为函数装饰器使用并不是正常用法,因为这会隐藏函数的 async
版本。通常,make_sync
用于提供函数的非异步、备用版本。
还可以使用 make_sync
与抽象函数一起使用
class abc_base(ABC):
@abstractmethod
async def doit_async(self):
raise NotImplementedError()
doit = make_sync(doit_async)
class abc_derived(abc_base):
async def doit_async(self):
return 42
a = abs_derived()
print(a.doit())
# Will print out 42
抽象分派将在运行时发生,并且对 doit_async
的调用将来自子类。这允许您在 ABC
中定义异步API,并构建一组通用的同步方法。
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源代码分发
make_it_sync-2.0.0.tar.gz (5.5 kB 查看哈希值)
构建分发
make_it_sync-2.0.0-py3-none-any.whl (4.3 kB 查看哈希值)
关闭
make_it_sync-2.0.0.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 2b19630e6e6ad7d87aa32a6120113cb61b88872afc88838b98d1d0dc3eebf8b5 |
|
MD5 | fd325c5501b9b531925f8b6c57a05991 |
|
BLAKE2b-256 | 121d4dcf790222ee625f2e46b2d0d621b989010cb840bf6fa25a8bb8e48aa5ad |
关闭
make_it_sync-2.0.0-py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 52a7956cafd6613a2e5db6606e82e4f351a9253f44a31bc152cb36bcb80779c0 |
|
MD5 | c2cdb0a0719efe9d9d59afdf1fd0da71 |
|
BLAKE2b-256 | 0c21d65181f962743a917480817da57848df2b9762df557ffa9c78308421134d |