Python代码在线程启动后不继续执行

时间:2018-04-18 19:06:25

标签: python multithreading

我是第一次编写一个线程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()

1 个答案:

答案 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中的函数