简单的数据转换管道。
picles.plumber的Python项目详细描述
基于python迭代协议的简单数据转换管道 在Python2.7、3.3和3.4版本上运行。
+----------+ +-------------+ +-------------+ +--------+ +----------+ | Producer | ---> | Transformer | ---> | Transformer | ---> | Tester | ---> | Consumer | +----------+ +-------------+ +-------------+ +--------+ +----------+
管道模型需要4种过滤器:
- 生产者:起点,仅限出境;
- 变压器:输入、处理、输出;
- 测试仪:输入、丢弃或通过;
- 消费者:终点,仅限入站。
importplumber@plumber.filterdefupper(data):returndata.upper()ppl=plumber.Pipeline(upper)output=ppl.run("Hey Jude, don't make it bad")print(''.join(output))"HEY JUDE, DON'T MAKE IT BAD"
由于设计基于python的迭代协议,因此生产者和 消费者是普通的物品。变压器的实施方式如下 接受单个参数、执行处理并返回 结果。
也可以根据一些先决条件检查输入数据,以确定 转换是否应该发生或被忽略。例如:
importplumberdefis_vowel(data):ifdatanotin'aeiou':raiseplumber.UnmetPrecondition()@plumber.filter@plumber.precondition(is_vowel)defupper(data):returndata.upper()ppl=plumber.Pipeline(upper)output=ppl.run("Hey Jude, don't make it bad")print(''.join(output))"hEy jUdE, dOn't mAkE It bAd"
预取
如果您认为管道花费了太长时间来向前移动数据, 您可以使用预取功能。要使用它,只需定义 要预取的项的限制。
使用与上面相同的示例:
ppl=plumber.Pipeline(stripper,upper)transformed_data=ppl.run([" I am the Great Cornholio!","Hey Jude, don't make it bad "],prefetch=2)fortdintransformed_data:print(td)IAMTHEGREATCORNHOLIO!"HEY JUDE, DON'T MAKE IT BAD"
默认情况下,预取机制是基于线程的,因此要注意CPU绑定 管道。
安装
PYPI(推荐):
$ pip install picles.plumber
源代码(开发版本):
$ git clone https://github.com/picleslivre/plumber.git &&cd plumber && python setup.py install
使用许可证
本项目根据FreeBSD 2条款获得许可。有关详细信息,请参见LICENSE。