-------- Original Message -------- From: Andrea Spadaccini
<[EMAIL PROTECTED]> CiaoCiao a tutti, Con twisted all'inizio è sempre così :-)mi sono trovato ad utilizzare una libreria[1] che si basa su twisted, e non conoscendo bene quest'ultimo mi trovo un po' in difficoltà. Io devo semplicemente richiamare tre volte il metodo getVariable, per prelevare tre variabili differenti, utilizzare queste tre variabili per alcune operazioni su DB ed infine richiamare N volte il metodo setVariable. Non conosco gatherResult, può darsi che sia comunque utile al tuo caso.
Puoi comunque far così: .. def extract_result(res_list): #res_list = ((1 if ok or 0 on error, res_dd1), (1 if ok or 0 on error, res_dd2), .. ) result = [x[1] for x in res_list]
def accedi_al_db(results): def _(results): #qui fai ciò che vuoi sul database #per la trasact return valori return deferToThread(_, results) #oppure decori con @transact, vedi Stiq #operare in un altro thread è comodo perche il db è lento
def set_vars(valori): return DeferredList([setVariable(var)
for var in results])
dvar1 =getVariable(..) dvar2 =getVariable(..) dvar2 =getVariable(..) dd = DeferredList([dvar1, dvar2, dvar3]) dd.addCallback(extract_result) dd.addCallback(accedi_al_db) dd.addCallback(lambda x:set_vars(x))
la deferredlist la trovi qui http://twistedmatrix.com/projects/core/documentation/howto/defer.html#auto7
Rigorosamente non testato. In particolare la
lambda all'ultima riga credo sia necessaria per poter fare gestire
correttamente la deferred alla callback, cioè: la callback ha come
argomento una deferred...
Scrivendo solo ... dd.addCallback(set_vars)
Spero di esserti stato d'aiutoQualcuno può darmi una mano? Grazie in anticipo! Anche io sono interessato a vedere del codice migliore del mio :-) Ciao Alessandro |
_______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python