Есть какие-нибудь методики или библиотеки для создания “красоты” ассинхр. кода, а то там все колбеками обвешано.
Например что-нибудь на подобии fibers
def get(self):
self.foo0()
def foo0(self):
self.write("0")
self.bar(callback=self.foo1)
def foo1(self):
self.write("1")
self.bar(callback=self.foo2)
def foo2(self):
self.write("2")
self.finish()
def bar(self, callback):
self.write("-bar-")
callback()
def get(self):
self.start(self.foo0)
def foo0(self):
self.write("0")
yield self.bar
self.write("1")
yield self.bar
self.write("2")
self.finish()
def bar(self, callback):
self.write("-bar-")
callback()
def start(self, func):
it = func()
cb = it.next()
cb(callback=self.async_callback(self.start2,it))
def start2(self, it):
try:
cb = it.next()
cb(callback=self.async_callback(self.start2,it))
except StopIteration:
pass
try:
result = yield foo()
exept MyExc:
pass
А для tornado есть что-то подобное? Что-то ничего не нашел, сейчас попробую что нибудь с генератором придумать.Уже - есть недавно добавленный модуль gen - http://groups.google.com/group/python-tornado/browse_thread/thread/3c21e276579dd353
ziroСейчас разберусь с ним, а я уже удобную оболочку для asyncmongo написал - вызов как в классическом + отлов ошибок через try..exceptА для tornado есть что-то подобное? Что-то ничего не нашел, сейчас попробую что нибудь с генератором придумать.Уже - есть недавно добавленный модуль gen - http://groups.google.com/group/python-tornado/browse_thread/thread/3c21e276579dd353
@tornado.web.asynchronous
@tornadoinline.inline_mongo
def get(self):
print 'start foo0'
self.write("start<br/>\n")
yield self.db.user.save({ 'login':'bill', 'level':0 })
self.write('save ok<br/>\n')
self.write("find")
try:
user = yield self.db.user.find_one({})
self.write(str(user) + '<br/>\n')
except tornadoinline.MongoError:
self.write('-error-')
self.write("finish")
self.finish()