将生成器/迭代器链接到处理链、树和图的框架
chainlet的Python项目详细描述
chainlet库提供了一个轻量级模型来创建来自 生成器、协同程序、函数和自定义对象。 与其要求您嵌套代码或插入钩子,chainlet提供了简洁、直观的绑定语法:
# regular nested generatorscsv_writer(flatten(xml_reader(path='data.xml'),join='.'.join),path='data.csv')# chainlet pipelinexml_reader(path='data.xml')>>flatten(join='.'.join)>>csv_writer(path='data.csv')
使用chainlet创建的处理管道是生成器和函数的扩展: 它们可以迭代以获取结果,调用以推送输入,甚至用于获取/获取数据流。 chainlet的绑定允许从简单的构建块组成复杂的处理链。
创建新的链表很简单,只需要定义数据的处理。 使用常规函数、生成器或协程,让chainlet处理其余部分通常就足够了:
@chainlet.genletdefmoving_average(window_size=8):buffer=collections.deque([(yield)],maxlen=window_size)whileTrue:new_value=yield(sum(buffer)/len(buffer))buffer.append(new_value)
功能
我们将chainlet设计成一个简单、直观的库:
- 用独立的小处理块模块化代码。
- 直观地从单个元素组成处理链。
- 自动将函数、生成器和协同程序集成到链中。
- 使用复杂的链扩展您的处理能力,这些链根据需要分叉和连接。
在引擎盖下,chainlet以最小的方式合并迭代器和函数范例,以保持轻量级。
- 线性管道的隐式尾递归消除和链遍历的过早结束。
- 迭代地、连续地、甚至异步地推和拉链。
- 扩展或取代管道遍历和处理的简单接口。
在其核心chainlet努力成为尽可能的Python: 你写python,你就得到python。 没有蹦床、回调、堆栈、处理程序,…
我们会照顾好那些丑陋的部分,这样你就不用了。
状态
chainlet库源于我们在数据中心管理中对可访问并发性的需求。 此后,我们在生产环境中为许多用例采用了这个库: *使用基于流的数据提取和转换的模块化监控套件。 *用于同时对多个文件执行并发操作的管理脚本。
处理链、树和图的语法和通用接口都是稳定的。 正在进行的工作主要集中在简化并行迭代接口上。 一个主要的焦点是添加自动并发性、异步性和并行性。 我们的目标是从功能编程和静态优化中选择功能。
最近的变化
1.3.0版
Thread-based concurrent traversal, improved single- and multi-stream distinction.
1.2.0版
Synchronous concurrent traversal, chain slicing and merging, fully featured function and generator wrappers
1.1.0版
Added chainlet versions of builtins and protocol interfaces
1.0.0版
Initial release