扭曲端口同步代码到异步

时间:2016-01-12 09:55:21

标签: python asynchronous twisted deferred

我正在尝试将同步代码移植到异步,我遇到了这个问题,这是工作流程:

  • 创建数据对象:对于此数据,我必须应用多个操作,这取决于前一个的结果(不是结果,但可能会省略某些操作)
  • 循环执行所有操作
  • 检查是否需要采取措施
  • 应用操作
  • 返回已更改的数据对象

这里以同步方式看起来像是什么:

import random

def list_actions():
    # this is a database query in real world
    return ['first', 'second', 'third', 'fourth', 'fifth']

def apply_action(data, action):
    if random.randint(0, 1):
        data['applied_actions'].append(action)
    else:
        data['skipped_actions'].append(action)
    return data

def main():
    data = {
        'applied_actions': [], 
        'skipped_actions': []
    }
    actions = list_actions()
    for action in actions:
        apply_action(data, action)

    print data


if __name__ == '__main__':
    main()

有人能指出我使这段代码异步的正确方向吗?

1 个答案:

答案 0 :(得分:0)

我假设您非常熟悉Twisted和异步概念,例如:deferred,callback,errback等。这里需要的是处理for循环,你应该使用DeferredList诀窍。