竞争者

concurrent-utils的Python项目详细描述


母版:travis-mastercoveralls-master

显影:travis-developcoveralls-develop


python 3.7+asyncio的并发实用程序;主要部分是组件抽象。 为了支持这一点,一些用于任务间、线程间和进程间通信的管道实现 还提供了一些序列化实用程序。 进程间通信基于zeromq。 最后,提供了一个类EventLoopThread,可用于桥接同步和异步代码。

“组件”是独立执行的代码,如异步任务、线程、工作线程的负载或进程。 组件处理由其所有者发出的命令,并创建要由其所有者处理的事件。 组件也可能产生结果,当然也可能与所有者以外的其他实体通信。

尽管asyncio被大量使用,但工作负载与其所有者之间的连接将两者分离 允许任何并发模型。 下面是一个示例,取自并改编自测试套件:

import asyncio
from concurrent.futures import ThreadPoolExecutor

from concurrent_utils.component import Component, component_workload, start_component_in_thread


async def test_thread_component_result_success_and_command():
    @component_workload
    async def component(x, *, commands, events):
        await events.send(Component.EVENT_START)
        ### startup complete

        # reply to command
        await commands.send(await commands.recv() + 1)

        # return
        return x

    e = ThreadPoolExecutor(1)
    comp = await start_component_in_thread(e, component, 1)

    assert await comp.request(1) == 2

    assert await comp.result() == 1


asyncio.run(test_thread_component_result_success_and_command())

尽管组件被定义为协程,但它(在本例中)不是在所有者的事件循环上执行的。 相同的组件可以在所有者的事件循环上运行,而无需修改, 或者,稍加修改,使component函数pickle成为可能,改为在工作进程中运行。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java无法启动发现(Android附近连接API v2)   如何用Java在Firestore中创建嵌套字段?   GUI Java中的swing BMI计算器;   java如何检查上下文是否为当前正在运行的活动   LiveCycle ES4支持java 8吗?   构建Spring引导API后,java类路径不正确   启动时swing Java Jtable行颜色   JAVAutil。ConcurrentModificationException随着Apache Tomee Plus 7.1.2的发布启动ear文件   在JAVA中使用lambda表达式的foreach for循环   java小程序没有在我的IE8和firefox6中运行。0.2   java有没有比ConcurrentHashMap性能更好的并发映射?   java Android静态与非静态问题   尝试提交TableCell时调用java cancelEdit()   java在LINUX系统上使用MCRTsim模拟器   Java多态性方法重写