【发布时间】:2018-06-01 14:34:54
【问题描述】:
学习 Celery,阅读 Celery Best Practices,并有一个关于 Celery 数据库使用的非常简单的问题。
德尼·贝托维奇 说:
您不应将数据库对象(例如您的用户模型)传递给 后台任务,因为序列化的对象可能包含陈旧的 数据。
那么,如果我想在worker中连接数据库,什么是正确的选择:
@app.task
def add(x, y, collection):
client = MongoClient('mongodb://localhost:27017/')
db = client.wakawaka
db[collection].insert_one({'sum':x+y})
return True
或:
client = MongoClient('mongodb://localhost:27017/')
db = client.wakawaka
@app.task
def add(x, y, collection):
db[collection].insert_one({'sum':x+y})
return True
?
UPD:我可以在每个任务结束时close()我的mongodb连接,所以每次我需要一些东西时,任务都会连接到新的数据库,不会浪费资源。不过,我是否需要多次打开/关闭数据库连接?或者我可以连接一次并以某种方式刷新连接以检索新版本的数据库?
【问题讨论】:
标签: python mongodb celery pymongo celery-task