在我的脚本中,我有一个while True
循环,该循环不断检查mysql数据库。我的问题是,虽然True循环似乎只运行一次!我添加了变量i
,但它也停留在0。有人可以帮我吗?
import mysql.connector
import serial
import threading
import time
mydb = mysql.connector.connect(
host="",
user="",
passwd="",
database=""
)
cursor = mydb.cursor(buffered=True)
getData = "SELECT * FROM log"
ser = serial.Serial(
port="/dev/tty.usbmodem14111"
)
def serial_read():
while True:
line = ser.readline().decode('utf-8')
return line
def serial_write(mode):
while serial_read().startswith("OK") == False:
print(f"Set: {handle_data().mode}")
ser.write(f"Set: {handle_data().mode}".encode('utf-8'))
return True
def handle_data():
modeOld = None
i = 0
while True:
i += 1
cursor.execute(getData)
mydb.commit()
values = cursor.fetchall()
mode = values[-1][1]
print(serial_read())
if mode != modeOld:
print("{}: {}".format(i, mode))
serial_write(mode)
modeOld = mode
if serial_write(mode) == True:
print("Mode Set successfully!")
serial_read_thread = threading.Thread(target=serial_read())
handle_data_thread = threading.Thread(target=handle_data())
serial_read_thread.start()
handle_data_thread.start()
编辑1:我删除了try除外区块
编辑2:现在我知道它在if mode != modeOld
块中。我只是在那里找不到错误。
编辑3:我现在使用线程。似乎仍然只迭代一次
答案 0 :(得分:1)
在线程调用中,您正在调用目标,从target =分配的末尾删除括号,它将按预期工作。
此外,由于句柄数据线程已调用串行读取来获取数据,因此您不需要在线程中调用串行读取函数,这浪费了周期。