不要等待异步功能完成

时间:2014-08-01 14:59:36

标签: python asynchronous tornado

我有一个异步龙卷风服务器,可以调用异步函数。但是,该功能只是进行一些后台处理,我不想等待它完成。我怎样才能做到这一点?这是我的一个例子:

@gen.coroutine
def get(self):
    yield self.process('data') # I don't want to wait here
    self.write('page')

    @gen.coroutine
    def process(self, arg):
        d = yield gen.Task(self.otherFunc, arg)
        raise gen.Return(None)

1 个答案:

答案 0 :(得分:3)

只需在self.process之前删除yield(' data')。它仍然会运行,但get函数不会等待它完成。例如:

@gen.coroutine
def get(self):
    print 'a'
    yield self.process('data') # I don't want to wait here
    print 'b'
    self.write('page')

@gen.coroutine
def process(self, arg):
    print 'c'
    d = yield gen.Task(self.otherFunc, arg)
    print 'd'
    raise gen.Return(None)

将给出a,c,d,b但是:

@gen.coroutine
def get(self):
    print 'a'
    self.process('data') # I don't want to wait here
    print 'b'
    self.write('page')

@gen.coroutine
def process(self, arg):
    print 'c'
    d = yield gen.Task(self.otherFunc, arg)
    print 'd'
    raise gen.Return(None)

可以根据订单执行情况给出a,c,b,d或a,b,c,d,但它不会再等到流程完成后才能进入' c'。