快速开始¶
首先你需要自定义一个方法,例如:
>>> def add(n):
... return n + n
...
接下来导入StreamLine。你可以把它当成一条流水线/一个流程/一个动作,下文均以流水线为例。
>>> from work_stream import StreamLine
>>>
>>> line = StreamLine()
>>> line
<work_stream.line.StreamLine object at 0x000001BF1C5DA680>
>>>
StreamLine是一个可迭代的对象,可以通过调用其length和ready属性来查看流水线长度和是否完成的状态。
>>> line.length
0
>>> line.ready
False
>>>
现在我们把最开始定义好的add方法添加到流水线中,并调用line属性查看其流水线当前的状态/属性/值。param字段值为'',是因为流水线还未执行。
>>> line.add(add)
>>>
>>> line.line
[{'id': 0, 'status': {'status': '', 'result': '', 'cost': '', 'mode': True, 'param': ''}, 'block': <work_stream.block.StreamBlock object at 0x000001BF1C5DACE0>}]
>>>
如上所示,add方法被添加到line对象中之后变成了block对象。block重新封装了add是为了能够管理add的执行生命周期的状态以便于维护,其字段含义顾名思义。
当然,add还还能接收自定义参数。
>>> line.add(add, args=(1,))
>>> line.add(add, kwargs={'n': 123})
如果你有很多个方法需要add,可以使用append方法提交:
>>> line.append(
... [
... (add, False, (1,)),
... (add, False, (), {'n': 1}),
... {'func': add, 'mode': False, 'kwargs': {'n': 1}}
... ]
... )
特别说明:
add的方法自带inherit=True参数,该参数决定是否使用上一参数的返回值。当流水线中第一个方法执行时,默认接收start方法中的target参数。
inherit参数与自定义参数(args,kwargs)是互斥的,但是两者都写也不会报错,在``StreamLine``的内部,自定义参数的优先级比inherit更高**。
一切准备就绪,通过调用line.start()执行流水线。
>>> from work_stream import StreamLine
>>>
>>>
>>> def add(n):
... return n + n
...
>>>
>>> if __name__ == '__main__':
... line = StreamLine()
... line.add(add)
... line.add(add)
... res = line.start(12)
... print(line.line)
... print(res)
...
[{'id': 0, 'status': {'status': 'completed', 'result': 24, 'cost': '0.004399975296109915ms', 'mode': True}, 'block': <work_stream.block.StreamBlock object at 0x000001BF1C647970>}, {'id': 1, 'status': {'status': 'completed', 'result': 48, 'cost': '0.000700005330145359ms', 'mode': True}, 'block': <work_stream.block.StreamBlock object at 0x000001BF1C6468F0>}]
48
最终得到了一个12+12+24+24的结果。
更进一步的玩法:关于如何编排多个流水线。请在进阶中查看。