2015-11-20 14 views
5

私は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 

私は私のコールバックをしたいと思いますプロセス全体が終了したときではなく、呼び出されたときにメッセージを出力します。

+0

自然言語のように、あなたの質問を書き直してください、私は物事を理解できませんでした! –

+0

私はネイティブスピーカーではありませんが、私の他の質問を理解できますか?または、私は他の方もよく説明すべきでしょうか? –

+1

OT:「私の他の質問」のリンクはほとんど読んでいませんが、代わりに適切な概要を含める方がはるかに優れています。一方、よく知られている件名やリソース(例:wiki:DAG、またはpypi:cffi)へのリンクは大歓迎です。 –

答えて

2

私は問題が何かを見つけることができます、私はそれを終了する前に不定期に留まる必要があるスレッドベースのプロセスを使用しています。 C++では、プロセスが終了するまで待つのにgetchar()を使用しています。そして、Enterボタンを押すと、プロセスは解放部分にジャンプします。私もwhileで0.5秒のsleep()秒を使用しようとしました。それは、それが私を助けることができるかどうかを確かめるために一定の時間が経過するまで、試しました。私のPythonアプリケーションでは、両方のメソッドが同じように動作していました。ストリーミングに必要な値は、最初にキューに入れられ、プロセスが終了しない限り、値は出力されませんでした。

解決策は、スレッドベースのモデルを初期化するための2つの関数を作成することでした。最後の1つの関数は、プロセスを終了します。そうすることで、私はgetchar()sleep()も必要ない。これは私にかなり良い仕事です!、あなたの注意のおかげで!

関連する問題