【问题标题】:Python 'print' in a c++ based threading model基于 c++ 的线程模型中的 Python“打印”
【发布时间】:2016-02-22 08:26:28
【问题描述】:

我正在通过调用 C++ DLL 来设计 Python 应用程序,我已经发布了我的 DLL 和 Python 3.4 here 之间的交互。但是现在我需要在涉及基于线程的模型的流式传输中执行一些过程,并且我的回调函数看起来将所有prints 放入队列中,并且只有当我的流式传输结束时,才会打印所有信息。

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)。

标签: python c++ multithreading printing


【解决方案1】:

我可以找到问题所在,我正在使用一个基于线程的进程,该进程需要在结束之前无限期地停留。在 c++ 中,我使用getchar() 等待进程必须结束,然后当我按下回车按钮时,进程跳转到释放部分。我还尝试在while 中使用0.5 秒的sleep()s,直到经过一定时间来测试这是否对我有帮助,但它没有。这两种方法在我的 Python 应用程序中以相同的方式工作,我需要在流式传输中拥有的值首先放入队列中,除非进程结束,否则这些值会被打印出来。

解决方案是制作两个函数,前一个用于初始化基于线程的模型。最后一个函数用于结束该过程。通过这样做,我不需要getchar(),也不需要sleep()。这对我来说效果很好!感谢您的关注!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-14
    • 2016-05-09
    • 2018-10-27
    • 1970-01-01
    相关资源
    最近更新 更多