python - Python中的"Threading",绘制接收到的数据并同时发送

标签 python multithreading wxpython blocking pyserial

我在这里寻求一些高级建议。我正在使用 Python 绘制通过串行不断接收的数据。同时,我希望用户能够通过提示符(例如Python shell)输入数据。然后,该数据将通过同一个串行端口发送,以与同时发送数据的设备通信。

我的问题是绘图 app.MainLoop()“Thread”似乎阻塞了,在窗口关闭之前它不会显示我的 raw_input 部分。我也试过将这 4 行放在我的 while 循环中,但出现了同样的问题 - 它让我一次输入所有信息,但一旦绘图开始,它就会永远阻塞,直到我关闭绘图窗口。

if __name__ == '__main__':
    app = wx.App()
    window = DataLoggerWindow()
    window.Show()
    app.MainLoop()
    prompt_counter = "main"
    while(1):
        if prompt_counter == "main":
            ans = raw_input("Press f for freq, press a for amplitude: \n")
            if ans == "f":
                prompt_counter = "freq"
            elif ans == "a":
                prompt_counter = "amp"
            else:
                prompt_counter = "main"
        elif prompt_counter == "freq":
                freq = raw_input("Enter the frequency you want to sample at in Hz: \n")
                ser.write("f"+freq+"\n")
                prompt_counter = "main"
        elif prompt_counter == "amp":
                amp = raw_input("Type in selection")    
                ser.write("a"+amp+"\n")
                prompt_counter = "main"

绘图部分所做的就是读取串行端口,并打印接收到的数据。这两个部分分别与后端设备一起工作。所以我很确定这是我编写 Python 代码的方式的问题,但我不确定为什么......有什么想法吗?

最佳答案

免责声明:我不认为以下是好的做法。

您可以将 wx 内容的执行放在一个单独的线程中。

app = wx.App()
window = DataLoggerWindow()
import threading
class WindowThread(threading.Thread):
    def run(self):
        window.Show()
        app.MainLoop()
WindowThread().start()

这样,MainLoop 只会阻塞另一个线程,主线程应该仍然可用。

但是,我认为这不是最佳方法,您应该使用类似 App.OnIdle Hook 的方法。

关于python - Python中的"Threading",绘制接收到的数据并同时发送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13506498/

相关文章:

c - 将参数传递给线程但得到的结果与预期完全不同

python - 从应用程序调用时,CEFPython 将不会初始化

python - 不是从 MainLoop() 出来的

python - discord.py 检查嵌入标题的内容

python - 如何使用 SQLAlchemy contextmanager 并仍然获得行 ID?

python - 如何使用 Sobel 算子在图像中查找基本形状(砖 block 、圆柱体、球体)?

java - 为什么 ArrayBlockingQueue 在捕获 InterruptedException 后会发出 'not full' 信号?

python - Python 的 epsilon 值是否正确?

c# - C#中volatile(Thread.VolatileRead/Thread.VolatileWrite)的使用

python - WX.Python 和多处理