2017-09-01 3 views
1

Je suis nouveau sur python mais je sais que self est automatiquement passé.Je n'arrive pas à comprendre pourquoi ai-je cette erreur et j'ai la même erreur avec Fonction getGraph aussi 2 requis 1 donné. Qu'est-ce qui ne va pas ici?TypeError: func() prend exactement 1 argument (0 donné)

CreateDoc est CeleryTasks.py et insert_manager dans 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

Salut, quelle ligne provoque cette erreur? – user10089632

+0

tasks.createDoc.delay() son équivalent à tasks.createDoc() cela donne aussi l'erreur. – Sam

+0

Vous devez fournir combien de temps pour retarder exemple 'tâches.createDoc.delay()' va retarder 6 secs – user10089632

Répondre

0

self est toujours passé quand il est la méthode de classe.

Les tâches de céleri sont des fonctions indépendantes. Vous pouvez les ajouter self arguments en ajoutant bind=True via le décorateur app mais il est utilisé dans un but différent: bounded tasks

+0

oui! ça a marché. Fondamentalement, j'aurais pu faire sans passer soi-même et passer d'autres paramètres requis pour la fonction. Mais alors, si je deviens moi-même et que la tâche du céleri est une tâche liée. Cela me donne une erreur à l'intérieur de la fonction quand je l'utilise. Savez-vous pourquoi cela arrive? par exemple. '@ app.task (bind = true) def createDoc (auto, db, collName, données): db = self.db ' il donne l'erreur ** AttributeError: objet 'createDoc' n'a pas d'attribut « db '** – Sam

+0

de sorte que vous pouvez accepter la réponse/upvote s'il vous plaît? :-) – ItayB

+1

Je l'ai déjà fait upvote. Mais il dit que ma réputation est inférieure à 15, donc ils ne le montreront pas. En tout cas merci. – Sam