我是第一次编写一个线程Python脚本并遇到麻烦。一般的想法是Raspberry Pi从蓝牙连接接收数据,然后该数据用于创建调用start_laps
方法的线程。一旦启动此线程,我需要继续侦听新数据以确定是否应该杀死该线程。但是,我的代码在线程启动后没有继续执行。什么会导致这个?
import json
import bluetooth
import threading
import timed_LEDs
import subprocess
import ast
def start_laps(delay, lap_times):
timed_LEDs.start_LEDs(delay, lap_times)
# put pi in discoverable
subprocess.call(['sudo', 'hciconfig', 'hci0', 'piscan'])
server_socket = bluetooth.BluetoothSocket(bluetooth.RFCOMM)
port = 1
server_socket.bind(("", port))
server_socket.listen(1)
client_socket, address = server_socket.accept()
print("Accepted connection from ", address)
threads = []
while True:
print("RECEIVING")
data = client_socket.recv(1024)
data = json.loads(data.decode())
print(data)
if(data["lap_times"]):
print("STARTING THREAD")
t = threading.Thread(target=start_laps(int(data["delay"]), ast.literal_eval(data["lap_times"])))
threads.append(t)
t.start()
elif data == "stop":
print("Stop dat lap")
else:
print(data)
client_socket.close()
答案 0 :(得分:3)
您使用的是错误的线程模块。 这一行
threading.Thread(target=start_laps(int(data["delay"]), ast.literal_eval(data["lap_times"])))
执行函数start_laps
,这显然会阻止程序。你想要的是以下几点:
threading.Thread(target=start_laps, args=(int(data["delay"]), ast.literal_eval(data["lap_times"])))
这将使用给定的Thread
args
中的函数