私はC++ DLLを呼び出してPythonアプリケーションを設計しています。私はDLLとPython 3.4の間のやりとりを投稿しました。here。しかし、今私は、スレッドベースのモデルを含むストリーミングでいくつかの処理を行う必要があり、私のコールバック関数はキューにすべてのprint
を入れて、私のストリーミングが終了したときにのみ、Infoがすべて出力されます。C++ベースのスレッドモデルのPython 'print'
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
私は、次の方法を使用しようとしましたが、それらのすべてが同じように動作するようになります。
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
と:
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
私は私のコールバックをしたいと思いますプロセス全体が終了したときではなく、呼び出されたときにメッセージを出力します。
自然言語のように、あなたの質問を書き直してください、私は物事を理解できませんでした! –
私はネイティブスピーカーではありませんが、私の他の質問を理解できますか?または、私は他の方もよく説明すべきでしょうか? –
OT:「私の他の質問」のリンクはほとんど読んでいませんが、代わりに適切な概要を含める方がはるかに優れています。一方、よく知られている件名やリソース(例:wiki:DAG、またはpypi:cffi)へのリンクは大歓迎です。 –