2010-07-23 2 views
1

J'ai récemment commencé à travailler sur pas beaucoup familier tordu avec ses functions.I ont un problème lié à la méthode « deferToThread » ... mon code est ici pour utiliser cette méthodeobtenir résultat d'une fonction en cours d'exécution « deferToThread »

from twisted.internet.threads import deferToThread 
from twisted.internet import reactor 

results=[] 
class Tool(object): 

    def exectool(self,tool): 

#  print "Test Class Exec tool running..........." 
     exec tool 
     return 

    def getResult(self,tool): 
     return results.append(deferToThread(self.exectool, tool)) 

to=Tool() 

to.getResult(tools) 


f=open(temp).read() 
obj_tool=compile(f, 'a_filename', 'exec') 

[à 0x8ce7020, fichier "a_filename", ligne 1>, à 0x8cd4e30, fichier "a_filename", ligne 2>]

Je outils transmets un par un dans la méthode getResults() il executs avec succès & impressions les résultats quel script écrit dans les objets du fichier. Je dois stocker le résultat des outils s'exécutant dans une variable de sorte que je puisse l'enregistrer dans la base de données.Comment parvenir à cette cause quand j'appelle re = to.getResult (outils) et imprime "re" il n'en imprime aucun. JE DOIS ENREGISTRER SES RÉSULTATS DANS LA BASE DE DONNÉES? Y A-T-IL QUELQUE CHOSE QUE JE PEUX FAIRE?

Merci à l'avance

Répondre

3

Il y a deux problèmes ici.

Tout d'abord, deferToThread ne fonctionnera pas si vous ne démarrez jamais le réacteur. Espérons que cet extrait de code a été extrait d'une application Twisted-using plus grande où le réacteur fonctionne, donc ce ne sera pas un problème réel pour vous. Mais vous ne devriez pas vous attendre à ce que cet extrait fonctionne à moins d'y ajouter un appel reactor.run().

Ensuite, deferToThread renvoie Deferred. Le Deferred se déclenche avec le résultat de l'appel que vous avez passé. Ceci est couvert par le API documentation. De nombreuses API dans Twisted renvoient un Deferred, vous pouvez donc vouloir lire the documentation covering them. Une fois que vous comprenez comment ils fonctionnent et comment les utiliser, beaucoup de choses devraient être un peu plus faciles.

Questions connexes