基于 C++ 的线程模型中的 Python 'print'

标签 python c++ multithreading printing

我正在通过调用 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/

相关文章:

python - 如何将纽约时间的当前日期时间转换为Python中的纪元

python - 如何使用QFontDialog预览非系统字体

c++ - 作为 Qt5 库的一部分进行编译时如何启用/禁用 WebKit 功能

c++ - 检查大量类似条件的简单方法?

c# - 静态代码如何与多线程一起运行?

python : Comma at the end of print statement

c++ - memcpy 创建段错误

python - 消费者/生产者不等待事件

c++ - 如何安全地删除 ATL DLL 中的 std::thread

python - 一台PC上的ZeroMQ服务器和客户端