我想使用发动机作为我的龙卷风应用程序。正如在文档中给出的,这就是我应该做的ODM
from motorengine.document import Document
from motorengine.fields import StringField, DateTimeField
class Article(Document):
title = StringField(required=True)
description = StringField(required=True)
published_date = DateTimeField(auto_now_on_insert=True)
new_title = "Better Title %s" % uuid4()
def create_article():
Article.objects.create(
title="Some Article",
description="This is an article that really matters.",
callback=handle_article_created
)
def handle_article_created(article):
article.title = new_title
article.save(callback=handle_article_updated)
def handle_article_updated(article):
Article.objects.find_all(callback=handle_articles_loaded)
def handle_articles_loaded(articles):
assert len(articles) == 1
assert articles[0].title == new_title
articles[0].delete(callback=handle_article_deleted)
def handle_article_deleted(number_of_deleted_items):
try:
assert number_of_deleted_items == 1
finally:
io_loop.stop()
io_loop.add_timeout(1, create_article)
io_loop.start()混淆之处在于,一旦创建实例,这是否会与数据库保持一致的连接?我希望所有模型都具有数据库的非阻塞I/O操作,所以如果这样做了,就不会有问题了。但我不应该为用户模型实现它,在验证时我只访问一次。是否有一种访问用户数据的正常方式?
另外,我不清楚有几件事:
io_loop.start()是每个文件吗?这部分在我看来很奇怪。请帮帮我。谢谢。
发布于 2015-06-04 11:58:46
阅读MotorEngine的代码,在我看来,您使用MongoDB所做的每一个操作,比如Article.objects.create,都会检查一个MotorClient实例,并在可能的情况下重用一个实例。以下是缓存连接并从缓存中查找连接的位置:
https://github.com/heynemann/motorengine/blob/master/motorengine/connection.py#L62
每个MotorClient都有一个持久的IOStreams池,所以您的问题的答案是肯定的。
IOLoop.start启动应用服务器。你应该在一个文件里叫它一次。对start的调用将永远运行,或者直到您终止该进程为止。
add_timeout调用只是演示MotorEngine功能的一种方式,它等待片刻,然后调用create_article。您不会在实际的应用程序中这样做;您可能会在没有create_article的情况下直接在RequestHandler中调用add_timeout。
https://stackoverflow.com/questions/30641824
复制相似问题