处理python线程

2024-10-03 23:21:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用Python3.5.2,遇到了以下情况:

我有任务A,布尔varStop=False任务B,我想启动任务A并监视布尔var,因此当它变为true时,我暂停任务A,当我再次变为False时,我恢复任务A;同时,任务B提供了关于任务A执行情况的统计信息,因此它必须开始运行,因为任务A确实如此,并且当任务A暂停时,它必须在任务A恢复之前刷新统计信息。我需要一些帮助来用python3.5中的线程以最简单的方式实现这一点

提前谢谢


Tags: 信息falsetruevar方式情况线程varstop
1条回答
网友
1楼 · 发布于 2024-10-03 23:21:39

使用threading.Event而不是布尔值。它被构建为由多个线程监视。在本例中,task_atask_a_monitor运行不同的速率,但等待相同的事件。主线程通过setclear方法控制它们。我包含了一个布尔值,用于告诉线程他们的工作已经完成,以及退出的时间——但它只在设置事件时起作用

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')

相关问题 更多 >