带有多线程操作单元的轻量级管道。
tinypipe的Python项目详细描述
t键入
tinyppe是一个轻量级库,有助于应用管道模式。管道的一般形式如下:
|---| |----| |- -| |----| |---|
... -> | Q | -> | OP | -> | Q | -> | OP | -> | Q | -> ...
|---| |----| |---| |----| |---|
当数据通过管道时,它首先被输入到输入队列中(上面用Q
表示)。下面的操作单元(OP
)抓取它并产生一个结果,然后将其输入输出队列。此过程将继续,直到数据遇到没有输出队列的终止OP
。
构建块用于管道构建,其中每个操作单元(由Pipe
表示)拥有一个线程并单独运行。还包括一个ParallelPipe
,用于运行多线程的操作。有关详细信息,请参阅文档。
设置
python版本:3.6+(其他版本未测试,请随意试用!)
要安装tinyppe:
$ pip install tinypipe
用法
假设每个数据都必须按顺序通过函数f1
、f2
和f3
。管道的建造方式如下:
importtinypipeastp# 1. Create pipelinepipeline=tp.Pipeline()# 2. Append pipes to pipelinef1_pipe=tp.pipe.FunctionPipe(f1)pipeline.append(f1_pipe)f2_pipe=tp.pipe.FunctionPipe(f2)pipeline.append(f2_pipe)f3_pipe=tp.pipe.FunctionPipe(f3)pipeline.append(f3_pipe)# One can call `pipeline.extend([f1_pipe, f2_pipe, f3_pipe])` instead# 3. Build & start the pipeline# Once the pipeline is started, it will keep trying to get data to process## The following `pipeline.build()` call is optional. `pipeline.start()` will# make the call if it is not called.## pipeline.build()pipeline.start()# 5. Feed data into the pipelinedata_iterator=...fordataindata_iterator:pipeline.put(data)# 6. If all the data has been passed into the pipeline,# wait for it to finish all the work.pipeline.join()