Sto progettando un'applicazione Python chiamando una DLL C++, ho pubblicato la mia interazione tra la mia DLL e Python 3.4 here. Ma ora ho bisogno di fare qualche processo in streaming che coinvolga un modello basato su thread e la mia funzione di callback cerca di mettere in coda tutti gli print
e solo quando il mio streaming è terminato, tutte le informazioni vengono stampate.Python 'print' in un modello di threading basato su C++
def callbackU(OutList, ConList, nB):
for i in range(nB):
out_list_item = cast(OutList[i], c_char_p).value
print("{}\t{}".format(ConList[i], out_list_item))
return 0
ho cercato di utilizzare i prossimi modi, ma tutti loro sguardi a lavorare nello stesso modo:
from threading import Lock
print_lock = Lock()
def save_print(*args, **kwargs):
with print_lock:
print (*args, **kwargs)
def callbackU(OutList, ConList, nB):
for i in range(nB):
out_list_item = cast(OutList[i], c_char_p).value
save_print(out_list_item))
return 0
e:
import sys
def callbackU(OutList, ConList, nB):
for i in range(nB):
a = cast(OutList[i], c_char_p).value
sys.stdout.write(a)
sys.stdout.flush()
return 0
Vorrei che il mio callback stampa il suo messaggio quando viene chiamato, non quando l'intero processo finisce.
Si prega di riscrivere la tua domanda, come in linguaggio naturale, non ho potuto capire una cosa! –
Ok, è perché non sono un madrelingua, ma potresti capire la mia altra domanda? o dovrei spiegare meglio anche l'altro? –
OT: quasi nessuno legge i link "la mia altra domanda", è molto meglio includere un riepilogo applicabile. D'altra parte, il collegamento a argomenti o risorse ben noti (ad esempio wiki: DAG o pypi: cffi) è il benvenuto. –