代码说明:
- 队列通信:主线程和子线程通过
queue.Queue
进行通信,主线程将新的参数放入队列,子线程从队列中取出参数来调整其工作行为。 - 子线程行为:子线程根据主线程传递的参数调整行为:
"fast"
:子线程以 0.5 秒间隔快速工作。"slow"
:子线程以 2 秒间隔慢速工作。"normal"
:子线程以 1 秒间隔普通工作。
- 用户输入:主线程通过
input()
函数接收用户输入,用户可以输入参数来控制子线程的行为,也可以输入 "stop"
来停止子线程的工作。 - 动态调整:每当用户输入新参数,主线程将参数放入队列中,子线程检查队列并动态调整其工作方式。
运行步骤:
- 程序启动后,子线程会等待 3 秒钟,主线程发送开始信号后,子线程开始按照默认的
"normal"
模式工作。 - 用户可以在主线程中输入
"fast"
、"slow"
或 "normal"
,这些输入将传递给子线程,子线程会相应地调整工作速度。 - 输入
"stop"
会触发子线程的停止事件,结束子线程的工作。
import threading
import time
import queue
# 创建事件对象和队列
start_event = threading.Event()
stop_event = threading.Event()
param_queue = queue.Queue()
# 子线程函数,接收主线程传递的参数
def worker():
print("子线程等待开始信号...")
start_event.wait() # 等待主线程发出开始信号
print("子线程开始工作...")
current_param = "normal" # 默认参数
while not stop_event.is_set(): # 检查停止信号
# 检查队列中是否有新的参数
try:
current_param = param_queue.get_nowait() # 非阻塞获取参数
print(f"子线程更新参数: {current_param}")
except queue.Empty:
pass # 没有新参数则继续使用当前参数
# 根据当前参数决定子线程行为
if current_param == "fast":
print("子线程快速工作...")
time.sleep(0.5) # 快速工作
elif current_param == "slow":
print("子线程慢速工作...")
time.sleep(2) # 慢速工作
else:
print("子线程普通工作...")
time.sleep(1) # 普通工作
print("子线程停止工作...")
# 启动子线程
t = threading.Thread(target=worker)
t.start()
# 主线程等待 3 秒后发送开始信号
time.sleep(3)
print("主线程发送开始信号")
start_event.set() # 触发开始信号
# 主线程循环接收用户输入,并将输入作为参数发送给子线程
while True:
param = input("请输入子线程行为参数 (fast, slow, normal),输入 'stop' 停止子线程: ").strip()
if param == "stop":
print("主线程发送停止信号")
stop_event.set() # 触发停止信号
break
else:
param_queue.put(param) # 将新参数放入队列,子线程会获取
print(f"主线程发送参数: {param}")
# 等待子线程结束
t.join()
print("子线程已结束")