Python 需要线程某个函数
Python need to thread a certain function
首先我想说的是我一直在看视频并尽力了解如何使线程工作,但我无法弄清楚。我希望有人可以在我的特定情况下为我做这件事,我可以从中学习或者至少让它为我工作。
我希望 start_timer 函数是一个线程进程,这样用户在 运行 时仍然可以激活其他函数。
最终每个功能都将与 tkinter 中的一个按钮相关联,并将信息发送到我的 raspberry pi 以控制我花园的浇水。
这是我的代码:
import time
class Valve:
def __init__(self, pin, location):
self.pin = pin
self.location = location
timer = 0
status = False
def turn_on(self):
self.status = True
self.send_info()
def turn_off(self):
self.status = False
self.send_info()
def set_timer(self, minutes):
self.timer = minutes * 60
def start_timer(self):
self.turn_on()
self.status = True
while self.timer > 0:
print(self.timer)
self.timer -= 1
time.sleep(1)
self.turn_off()
def send_info(self):
print("sending this info to server:", self.pin, self.status)
hose1 = Valve(1, 'Garden')
hose2 = Valve(2, 'Lawn')
hose1.set_timer(1)
hose1.start_timer()
hose2.turn_on()
我认为用下面的替换 hose1.start_timer() 会起作用,但它仍然在执行 hose2.turn_on() 之前运行这个漏洞过程。
thread = threading.Thread(target=hose1.start_timer(), args=hose1.timer)
thread.start()
感谢任何能为我完成这项工作的人!
另外,如果有人对这个项目感兴趣,我希望有一个合作伙伴在创建这个项目的过程中来回交流想法。
你调用你的线程是错误的。
你需要使用
thread = threading.Thread(target=hose1.start_timer, args=(hose1.timer, ))
或
thread = threading.Thread(target=lambda: hose1.start_timer(), args=(hose1.timer,))
如果您希望线程在程序退出时退出,因为这是 tkinter,那很可能是根 window。
您可以使用 thread.daemon = True
将线程设置为守护进程,然后您可以调用 thread.start()
首先我想说的是我一直在看视频并尽力了解如何使线程工作,但我无法弄清楚。我希望有人可以在我的特定情况下为我做这件事,我可以从中学习或者至少让它为我工作。
我希望 start_timer 函数是一个线程进程,这样用户在 运行 时仍然可以激活其他函数。
最终每个功能都将与 tkinter 中的一个按钮相关联,并将信息发送到我的 raspberry pi 以控制我花园的浇水。
这是我的代码:
import time
class Valve:
def __init__(self, pin, location):
self.pin = pin
self.location = location
timer = 0
status = False
def turn_on(self):
self.status = True
self.send_info()
def turn_off(self):
self.status = False
self.send_info()
def set_timer(self, minutes):
self.timer = minutes * 60
def start_timer(self):
self.turn_on()
self.status = True
while self.timer > 0:
print(self.timer)
self.timer -= 1
time.sleep(1)
self.turn_off()
def send_info(self):
print("sending this info to server:", self.pin, self.status)
hose1 = Valve(1, 'Garden')
hose2 = Valve(2, 'Lawn')
hose1.set_timer(1)
hose1.start_timer()
hose2.turn_on()
我认为用下面的替换 hose1.start_timer() 会起作用,但它仍然在执行 hose2.turn_on() 之前运行这个漏洞过程。
thread = threading.Thread(target=hose1.start_timer(), args=hose1.timer)
thread.start()
感谢任何能为我完成这项工作的人!
另外,如果有人对这个项目感兴趣,我希望有一个合作伙伴在创建这个项目的过程中来回交流想法。
你调用你的线程是错误的。
你需要使用
thread = threading.Thread(target=hose1.start_timer, args=(hose1.timer, ))
或
thread = threading.Thread(target=lambda: hose1.start_timer(), args=(hose1.timer,))
如果您希望线程在程序退出时退出,因为这是 tkinter,那很可能是根 window。
您可以使用 thread.daemon = True
将线程设置为守护进程,然后您可以调用 thread.start()