基于decorator的半同步编程模块

semisync的Python项目详细描述


什么是半同步.py?

有些问题最好同步解决,而另一些则更好 适合异步范式。大多数问题都是 介于-它们可以从异步执行中获益,但需要 某些事件按一定顺序发生。本模块旨在 通过引入 依赖关系。如果一个进程必须在另一个进程 完成后,这个过程被称为“依赖”于第二个过程。 py是使用python的多处理库和 装饰语法的自由剂量。

安装

通过PIP安装

sudo pip install semisync

或通过setup.py

sudo python setup.py install

让我们看一些代码

from semisync import semisync
from multiprocessing import Manager
from random import random, randint
from time import sleep

# shared data between processes
shared = Manager().Namespace()

# a demo callback function
def output(field, value):
  print field + ": $" + str(value)

# simple callback syntax
@semisync(callback=output)
def revenue():
  # simulated api call
  sleep(random())
  shared.revenue = randint(1, 1000)
  return "Revenue", shared.revenue

@semisync(callback=output)
def expenses():
  # simulated api call
  sleep(random())
  shared.expenses = randint(1, 500)
  return "Expenses", shared.expenses

# will run only when revenue() and expenses() have completed
@semisync(callback=output, dependencies=[revenue, expenses])
def profit():
  shared.profit = shared.revenue - shared.expenses
  return "Profit", shared.profit

# queue function calls
revenue()
expenses()
profit()

# executes queued calls semi-synchronously
semisync.begin()

要重复此过程,只需使用 每次迭代后的semisync.clear()

for i in range(10):
  revenue()
  expenses()
  profit()
  semisync.begin()
  semisync.clear()

在这个简单的例子中,从同步移动到半同步 执行将平均执行时间从1.00秒缩短到.700秒 几秒钟。尽管使用的示例很简单,但是依赖树可以 任意复杂。

附加说明

<>为了使模块更灵活,很少有假设。 关于您选择如何处理共享数据。尽管管理器()来自 示例中使用了多处理库,您可以自由使用 无论你想要什么形式。你还负责锁定共享数据 如果多个进程访问同一变量。具有极大的灵活性 责任重大。

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

推荐PyPI第三方库


热门话题
如何使用外部java程序在minecraft中移动minecraft角色的相机   java输出文本文件中的变量   java LazyLoadingException在我尝试从多通关系获取对象时出现   java json rest API的错误:ClassCastException:org。json。无法将JSONObject强制转换为组织。json。杰索纳雷   java BigInteger。C中的intValue()等价物#   java大写所有字符,但不包括带引号字符串中的字符   java获取特殊字符   javascript为什么Selenium中的所有getX()调用都需要这么长时间?   rabbitmq rabbitmq java客户端并行消费   如何使用selenium Java在popover窗口中提取文本   对象在java中构造一类对象   java Room数据库未实现   json JSONObject可以使用java保存大的格式化双值吗?   有时限的旅行推销员   java HttpsURLConnection openConnection查询   java无法使用Spring@Entity注释创建MySQL表   lambda Java 8仅映射到值类型集合   java提供OSGi服务而不实现接口   java单个对象重写对象数组,不确定原因