2017-09-01 5 views
1

Ich bin neu in Python, aber ich weiß, dass Selbst automatisch übergeben wird. Ich kann nicht verstehen, warum ich diesen Fehler bekomme und ich bekomme den gleichen Fehler mit getGraph Funktion sowie 2 benötigt 1 gegeben. Was läuft hier falsch?TypeError: func() nimmt genau 1 Argument (0 gegeben)

CreateDoc ist in CeleryTasks.py und insert_manager in MongoTriggers.py

@app.task 
    def createDoc(self): 
     print ("CeleryTasks:CreateDoc") 
     if 'refs' not in self.data: 
      return 

     print(self.data['refs']) 

     for id in self.data['refs']: 
      doc = self.db[self.collName].find_one({'_id': id}) 
      if doc is None: 
       insertedID = self.db[self.collName].insert_one({ 
        "_id": id 
       }) 

       print (insertedID) 

    #Trigger on Mongo Operations 
    def insert_manager(op_document): 
     print("Data Inserted") 
     # pprint.pprint (op_document) 
     data = op_document['o'] 
     ns = op_document['ns'].split('.') 
     # pprint.pprint (data) 
     docID = op_document['o']['_id'] 
     tasks = CeleryTasks(port, docID, dbName, collectionName, data) 
     tasks.createDoc() 
     tasks.getGraph.delay(docID) 
+0

Hi, welche Linie verursacht diesen Fehler? – user10089632

+0

tasks.createDoc.delay() es entspricht Tasks.createDoc() Dies gibt auch den Fehler. – Sam

+0

Sie müssen angeben, wie lange es dauert, das Beispiel 'tasks.createDoc.delay()' zu verzögern 6 Sekunden – user10089632

Antwort

0

self immer bestanden, wenn es Methode der Klasse ist.

Sellerie Aufgaben sind unabhängige Funktionen. Sie können sie self Argumente hinzufügen, indem Sie bind=True über den app Dekorateur hinzufügen, aber es wird für einen anderen Zweck verwendet: bounded tasks

+0

ja! es funktionierte. Im Grunde könnte ich ohne Selbstübergabe und andere für die Funktion erforderliche Parameter bestehen. Aber wenn ich mich selbst passiere und die Sellerie-Aufgabe zu einer gebundenen Aufgabe mache. Es gibt mir einen Fehler innerhalb der Funktion, wenn ich selbst benutze. Wissen Sie, warum das passiert? z.B. '@ app.task (bind = True) def CreateDoc (self, db, collName, Daten): db = self.db ' es Fehler gibt ** Attribute: 'CreateDoc' Objekt hat kein Attribut ‚db '** – Sam

+0

so können Sie die Antwort/upvote bitte akzeptieren? :-) – ItayB

+1

Ich habe es bereits hochgeladen. Aber es sagt, mein Ruf ist unter 15, also werden sie es nicht zeigen. Wie auch immer, danke. – Sam

Verwandte Themen