是的。实际上,我认为您想出了一个有趣的用例:使用最小的工作流作为分布式系统中一次性操作的集中锁定机制 - 例如从多个主机中的单个主机执行的 cron 作业(主机有首先进行选举,无论谁赢得锁,都可以执行一个动作)。使用 Amazon SWF 和最少的代码也可以实现相同的目标:
一个小的 Python 示例,使用boto.swf
(使用 1. from this post来设置域):
对决策者进行编码:
#MyDecider.py
import boto.swf.layer2 as swf
class OneShotDecider(swf.Decider):
domain = 'stackoverflow'
task_list = 'default_tasks'
version = '1.0'
def run(self):
history = self.poll()
if 'events' in history:
decisions = swf.Layer1Decisions()
print 'got the decision task, doing the work'
decisions.complete_workflow_execution()
self.complete(decisions=decisions)
return False
return True
启动决策者:
$ ipython -i decider.py
In [1]: while OneShotDecider().run(): print 'polling SWF for decision tasks'
最后,开始工作流程:
$ ipython
In [1]: wf_type = swf.WorkflowType(domain='stackoverflow', name='MyWorkflow', version='1.0', task_list='default_tasks')
In [2]: wf_type.start()
Out[2]: <WorkflowExecution 'MyWorkflow-1.0' at 0x32e2a10>
回到决策者窗口,您会看到如下内容:
polling SWF for decision tasks
polling SWF for decision tasks
got the decision task, doing the work
如果您的工作流可能会发展其业务逻辑或活动数量增加,那么最好坚持让决策者执行业务逻辑并让工作人员解决任务的标准方式。