跳转到主要内容

创建异步函数的同步版本

项目描述

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 事件循环并执行函数来实现。如果没有运行事件循环,它将使用当前线程,否则它将创建一个新线程并在那里运行函数。

特性

  1. 将包装独立的函数
  2. 传递所有参数(关键字和位置参数)
  3. 类上的实例方法可以被包装
  4. 抽象方法得到正确处理。

用法

安装 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 查看哈希值)

上传时间 Python 3

由以下支持