好的,还有其他问题的时间/帖子......
所以目前我正在尝试开发一个简单的python程序,它有一个webkit /网页视图和一个串口接口..不是它应该重要,但这也是在树莓派上运行。
以下代码工作正常..但是,一旦我取消注释您可以看到注释掉的串口线,它就会冻结系统。
这一天已经很久了,这个因为某种原因我的脑子被炸了.. Python不是我最强的观点,但请注意,这只是一个快速测试脚本现在...是的我已经使用谷歌和其他资源...
#!/usr/bin/env python
import sys
import serial
import threading
import time
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4.QtWebKit import *
sURL = ""
sURL2 = ""
objSerial = serial.Serial(0)
def SerialLooper():
global objSerial
if objSerial.isOpen() == True:
print("is_responding")
#objSerial.write("is_responding")
time.sleep(10)
SerialLooper()
class TestCLASS(object):
def __init__(self):
global sURL
global sURL2
global objSerial
objSerial = serial.Serial(0)
sURL = "http://localhost/tester"
app = QApplication(sys.argv)
webMain = QWebView()
webMain.loadFinished.connect(self.load_finished)
webMain.load(QUrl(sURL))
webMain.show()
thread = threading.Thread(target=SerialLooper)
thread.start()
sys.exit(app.exec_())
def load_finished(boolNoErrors):
global sURL
print("Url - " + sURL)
#something here
#something else here
newObjClass = TestCLASS()
修改 此外,它似乎不是多线程而是serial.write()
答案 0 :(得分:0)
我使用串口已经有一段时间了,但是IIRC它不是线程安全的(至少在Windows上)。您正在主线程中打开端口并在另一个线程中执行写入。无论如何,这是一种不好的做法。您也可以考虑编写一个简单的单线程程序来查看串口是否真正有效。
PS你的程序结构可以使用一些工作。你只需要一个全局语句(全局objSerial),其余的什么都不做。最好摆脱那个。
当超过递归深度时,对SerialLooper()的递归调用最终会失败;为什么不只是使用while循环......
def SerialLooper():
while objSerial().isOpen(): # Drop the == True
# print something
# write to the port
# Sleep or do whatever