基于aws swf服务构建的python工作流库
pyflow-swf的Python项目详细描述
#pyflow
一个基于aws[简单工作流服务][swf]的python工作流框架。
[swf]:https://aws.amazon.com/documentation/swf/
过程python
代码。它是使用[swf]实现的。工作流组件可以被实现为AWSλ函数,或者在Python、Ruby或Java中实现的活动函数:BRU/Java,它运行在任何能与SWF连接的BR/>的计算资源上。
< BR> > Pyflow深受AWS[ Java的流框架] [Java流]
和[FL ]的启发。"Ruby流"框架,但不尝试与这些框架兼容。
BR/> [JavaFLU]:http://DOCS.Amaz.com/Amazon SWF/Nave/AssFuffTeave/Relay.html:BR/> [Ruby Fuff]:http://DOCS.Amazon .com /Amazon SWF/Nealth/AWSRBBFuthGuogy/
BR/>程序ing model
本页很好地概述了pyflow
应用程序中使用的概念:[aws flow framework basic concepts][]。关于[javaFLU][]是
,但对于PyFoad的概念是相同的。该页上的
图表没有提到lambda函数,但是如果将它们添加到图表中,lambda服务将是另一个
活动工作器,lambda函数是活动方法。
[aws流框架基本概念]:http://docs.aws.amazon.com/amazonswf/latest/awsflowguide/awsflow basics application structure.html
\myworkflow(pyflow.workflow):
name='myworkflow'
version='1.0'
some_func=pyflow.lambdadescriptor('some_lambda_func')
other_func=pyflow.lambdadescriptor('other_lambda_func')
def run(self,input_arg):
if input_arg='bad_input':
提高pyflow.workflowfailedexception('bad_input','received bad input')
future1=self.some_func(input_arg)
return future2.result(
```
`run`方法的"input_arg"参数是一个任意值
,调用工作流时可以将其传递给工作流。工作流
实例有一个"swf"属性,即
a[workflow invocation helper](./pyflow/workflow_invocation_helper.py)
对象,该对象提供调用远程任务的接口,并
检索有关工作流执行上下文的信息。
调用lambda函数。首先为要调用的每个lambda函数定义一个类属性,然后像在"run"方法中使用方法一样使用它。有类似的描述符类用于调用swf活动和其他swf工作流。这些方法是异步的。它们立即返回一个
"future"对象,该对象可用于在调用完成时检索
调用的结果。在将来调用"result()"方法,直到结果就绪。如果调用成功,则返回其
结果。如果调用失败,"result"方法将引发"invocationexception"。
我将在本文档的后面部分解释上下文切换是如何实现的,以及在工作流实现过程中需要遵循的一些规则。
` workflowfailedexception`有两个参数。第一个是短的"原因"字符串,第二个是长的"细节"字符串。
首先需要启动一个工作流工作进程,它将管理一个或多个工作流定义的执行,然后需要告诉swf调用工作流。下面是如何使用swf创建工作流工作进程的方法。
`` python
domain='swfsampledomain'
task\u list='my workflow tasklist'
将无限期地轮询事件
pyflow.poll\u是否执行([myworkflow],domain=domain,task\u list=task\u list,
identity='my workflow worker')
```
>执行上述操作将首先确保工作流类型是在swf中注册的,然后进入一个无休止的循环,等待从swf服务接收
事件并执行工作流实例。
`轮询执行情况,使其在返回前仅执行"最长时间"秒
。工作流运行器是无状态的;工作流实例的执行状态由swf服务维护。这意味着
可以让"poll_for_executions"处理多个事件,
然后退出python进程,并使用相同的
参数重新启动它,并让它在停止执行的地方拾取工作流执行。
要实际启动工作流实例,可以运行如下代码:
`` python
域='swfsampledomain'
任务列表='my workflow task list'
工作流名称='myworkflow'
工作流版本='1.0'
lambda角色='arn:aws:iam::528461152743:role/swf lambda'
工作流id=pyflow.启动工作流(
域=域,
工作流ame=工作流名称,
工作流版本=工作流版本,
任务列表=任务列表,
lambda_role=lambda_role,
输入='"hello")
打印"以工作流id{}开始的工作流"。格式(工作流id)
````
OW执行--域swfsampledomain \
--工作流ID我的唯一工作流ID \
--工作流类型名称=我的工作流,版本=1.0 \
--任务列表名称=字符串转换器决策者\
--lambda角色arn:aws:iam::528461152743:role/swf lambda \
--输入"hello"
```
一个基于aws[简单工作流服务][swf]的python工作流框架。
[swf]:https://aws.amazon.com/documentation/swf/
过程python
代码。它是使用[swf]实现的。工作流组件可以被实现为AWSλ函数,或者在Python、Ruby或Java中实现的活动函数:BRU/Java,它运行在任何能与SWF连接的BR/>的计算资源上。
< BR> > Pyflow深受AWS[ Java的流框架] [Java流]
和[FL ]的启发。"Ruby流"框架,但不尝试与这些框架兼容。
BR/> [JavaFLU]:http://DOCS.Amaz.com/Amazon SWF/Nave/AssFuffTeave/Relay.html:BR/> [Ruby Fuff]:http://DOCS.Amazon .com /Amazon SWF/Nealth/AWSRBBFuthGuogy/
BR/>程序ing model
本页很好地概述了pyflow
应用程序中使用的概念:[aws flow framework basic concepts][]。关于[javaFLU][]是
,但对于PyFoad的概念是相同的。该页上的
图表没有提到lambda函数,但是如果将它们添加到图表中,lambda服务将是另一个
活动工作器,lambda函数是活动方法。
[aws流框架基本概念]:http://docs.aws.amazon.com/amazonswf/latest/awsflowguide/awsflow basics application structure.html
\myworkflow(pyflow.workflow):
name='myworkflow'
version='1.0'
some_func=pyflow.lambdadescriptor('some_lambda_func')
other_func=pyflow.lambdadescriptor('other_lambda_func')
def run(self,input_arg):
if input_arg='bad_input':
提高pyflow.workflowfailedexception('bad_input','received bad input')
future1=self.some_func(input_arg)
return future2.result(
```
`run`方法的"input_arg"参数是一个任意值
,调用工作流时可以将其传递给工作流。工作流
实例有一个"swf"属性,即
a[workflow invocation helper](./pyflow/workflow_invocation_helper.py)
对象,该对象提供调用远程任务的接口,并
检索有关工作流执行上下文的信息。
调用lambda函数。首先为要调用的每个lambda函数定义一个类属性,然后像在"run"方法中使用方法一样使用它。有类似的描述符类用于调用swf活动和其他swf工作流。这些方法是异步的。它们立即返回一个
"future"对象,该对象可用于在调用完成时检索
调用的结果。在将来调用"result()"方法,直到结果就绪。如果调用成功,则返回其
结果。如果调用失败,"result"方法将引发"invocationexception"。
我将在本文档的后面部分解释上下文切换是如何实现的,以及在工作流实现过程中需要遵循的一些规则。
` workflowfailedexception`有两个参数。第一个是短的"原因"字符串,第二个是长的"细节"字符串。
首先需要启动一个工作流工作进程,它将管理一个或多个工作流定义的执行,然后需要告诉swf调用工作流。下面是如何使用swf创建工作流工作进程的方法。
`` python
domain='swfsampledomain'
task\u list='my workflow tasklist'
将无限期地轮询事件
pyflow.poll\u是否执行([myworkflow],domain=domain,task\u list=task\u list,
identity='my workflow worker')
```
>执行上述操作将首先确保工作流类型是在swf中注册的,然后进入一个无休止的循环,等待从swf服务接收
事件并执行工作流实例。
`轮询执行情况,使其在返回前仅执行"最长时间"秒
。工作流运行器是无状态的;工作流实例的执行状态由swf服务维护。这意味着
可以让"poll_for_executions"处理多个事件,
然后退出python进程,并使用相同的
参数重新启动它,并让它在停止执行的地方拾取工作流执行。
要实际启动工作流实例,可以运行如下代码:
`` python
域='swfsampledomain'
任务列表='my workflow task list'
工作流名称='myworkflow'
工作流版本='1.0'
lambda角色='arn:aws:iam::528461152743:role/swf lambda'
工作流id=pyflow.启动工作流(
域=域,
工作流ame=工作流名称,
工作流版本=工作流版本,
任务列表=任务列表,
lambda_role=lambda_role,
输入='"hello")
打印"以工作流id{}开始的工作流"。格式(工作流id)
````
OW执行--域swfsampledomain \
--工作流ID我的唯一工作流ID \
--工作流类型名称=我的工作流,版本=1.0 \
--任务列表名称=字符串转换器决策者\
--lambda角色arn:aws:iam::528461152743:role/swf lambda \
--输入"hello"
```