2024-10-03 23:21:39 发布
网友
我正在使用Python3.5.2,遇到了以下情况:
我有任务A,布尔varStop=False和任务B,我想启动任务A并监视布尔var,因此当它变为true时,我暂停任务A,当我再次变为False时,我恢复任务A;同时,任务B提供了关于任务A执行情况的统计信息,因此它必须开始运行,因为任务A确实如此,并且当任务A暂停时,它必须在任务A恢复之前刷新统计信息。我需要一些帮助来用python3.5中的线程以最简单的方式实现这一点
提前谢谢
使用threading.Event而不是布尔值。它被构建为由多个线程监视。在本例中,task_a和task_a_monitor运行不同的速率,但等待相同的事件。主线程通过set和clear方法控制它们。我包含了一个布尔值,用于告诉线程他们的工作已经完成,以及退出的时间——但它只在设置事件时起作用
threading.Event
task_a
task_a_monitor
set
clear
import threading import time # use to start/pause/exit task task_event = threading.Event() task_event.clear() exit_task = False # for display time start_time = time.time() def task_a(event): while True: task_event.wait() if exit_task: return print('{: 3.2f}'.format(time.time() - start_time), 'task_a running...') time.sleep(1) def task_a_monitor(event): while True: task_event.wait() if exit_task: return print('{: 3.2f}'.format(time.time() - start_time), 'task_a_monitor running...') time.sleep(.5) t1 = threading.Thread(target=task_a, args=(task_event,)) t1.start() t2 = threading.Thread(target=task_a_monitor, args=(task_event,)) t2.start() print('{: 3.2f}'.format(time.time() - start_time), 'start task') task_event.set() time.sleep(3.5) print('{: 3.2f}'.format(time.time() - start_time), 'pause task') task_event.clear() time.sleep(3.5) print('{: 3.2f}'.format(time.time() - start_time), 'restart task') task_event.set() time.sleep(3.5) print('{: 3.2f}'.format(time.time() - start_time), 'repause task') task_event.clear() time.sleep(3.5) print('{: 3.2f}'.format(time.time() - start_time), 'terminate task') exit_task = True task_event.set() t1.join() t2.join() print('done')
使用
threading.Event
而不是布尔值。它被构建为由多个线程监视。在本例中,task_a
和task_a_monitor
运行不同的速率,但等待相同的事件。主线程通过set
和clear
方法控制它们。我包含了一个布尔值,用于告诉线程他们的工作已经完成,以及退出的时间——但它只在设置事件时起作用相关问题 更多 >
编程相关推荐