我想在芹菜任务中进行MongoDB操作,但在访问实例变量时我遇到了一些问题。
继承代码
app = CeleryConnector().app
class CeleryTasks:
def __init__(self, port, docID, dbName, collName, data):
self.port = port
self.docID = docID
self.dbName = dbName
self.collName = collName
self.data = data
self.client = MongoClient(host='localhost', port=port, username='admin', password='password')
self.db = self.client[dbName]
print ("CeleryTasks:init")
@app.task
def createDoc(dbName, collName, data):
print ("CeleryTasks:CreateDoc")
if 'refs' not in data:
return
# Here is the error I dont know how to access the client variable here.
#db = client[dbName]
print(data['refs'])
for id in data['refs']:
doc = db[collName].find_one({'_id': id})
if doc is None:
insertedID = db[collName].insert_one({
"_id": id
})
print (insertedID)
@app.task(bind=True)
def createDoc(self, dbName, collName, data):
print ("CeleryTasks:CreateDoc")
if 'refs' not in data:
return
print(data['refs'])
for id in data['refs']:
doc = self.db[collName].find_one({'_id': id})
if doc is None:
insertedID = self.db[collName].insert_one({
"_id": id
})
print (insertedID)
由于我们无法将非JSON可序列化对象传递给任务,因此传递 db或client 不是一种选择。
第一个功能出现问题 我不知道如何访问其中的客户端。试了几件但失败了。
第二个功能出现问题 它出错 doc = self.db [collName] .find_one({'_ id':id}) AttributeError:'createDoc'对象没有属性'db' 等等
如何使这项工作或如何访问芹菜任务中的实例变量?