Reputation: 23
I have a async tornado server that calls an async function. However, that function just does some background processing, and I don't want to wait for it to finish. How can I do this? Here is an example of what I have:
@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)
Upvotes: 1
Views: 4922
Reputation: 629
Simply remove the yield before self.process('data'). It will still run, but the get function won't wait for it to finish. Example:
@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)
Will give a,c,d,b but:
@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)
Can give a,c,b,d or a,b,c,d depending on order execution, but it will no longer wait until process is done to get to 'b'.
Upvotes: 3