我正在通过调用 C++ DLL 来设计 Python 应用程序,我已经发布了我的 DLL 和 Python 3.4 之间的交互 here .但是现在我需要在涉及基于线程的模型的流式传输中执行一些过程,并且我的回调函数看起来将所有 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
我希望我的回调在它被调用时打印它的消息,而不是在整个过程结束时。
最佳答案
我可以找到问题所在,我正在使用一个基于线程的进程,该进程需要在结束之前无限期保留。在 c++ 中,我使用 getchar()
等待进程必须结束,然后当我按下回车按钮时,进程跳转到释放部分。我还尝试在 while
中使用 0.5 秒的 sleep()
直到确定的时间过去以测试它是否可以帮助我,但它没有。这两种方法在我的 Python 应用程序中以相同的方式工作,我需要在流中拥有的值首先放入队列中,除非进程结束,否则打印值。
解决方案是制作两个函数,前一个用于初始化基于线程的模型。最后一个函数用于结束进程。通过这样做,我既不需要 getchar()
也不需要 sleep()
。这对我来说非常好!感谢您的关注!
关于基于 C++ 的线程模型中的 Python 'print',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33816702/