python 线程的暂停, 恢复, 退出详解及实例

  

Python 线程的暂停、恢复、退出详解及实例

线程的暂停

在 Python 中,线程的暂停可以通过 sleep 函数实现。sleep 函数的作用是让线程进入休眠状态,等待一定的时间之后再恢复执行。

示例一

下面是一个简单的例子,演示了如何使用 sleep 函数实现线程的暂停。

import threading
import time

def task():
    print('Start task...')
    time.sleep(5)
    print('Task finished.')

t = threading.Thread(target=task)
t.start()

print('Main thread...')
time.sleep(2)
t.join()

在上面的例子中,我们创建了一个名为 task 的函数,里面包含了一个 print 语句和一个 sleep 函数。然后,我们使用 threading 模块创建了一个线程,并让它执行 task 函数。

在主线程中,我们也使用了 sleep 函数,让主线程休眠 2 秒。最后,我们调用了线程的 join 方法,等待线程执行并结束。运行上面的代码,可以看到如下输出结果:

Main thread...
Start task...
Task finished.

可以看到,线程开始执行后,会等待 5 秒钟,然后才会结束。主线程也在执行过程中暂停了 2 秒钟,最后等待线程结束。

线程的恢复

在 Python 中,线程的恢复是自动完成的。一旦线程进入了休眠状态,等待时间结束之后,线程会自动恢复执行。

示例二

下面是一个稍微复杂一些的例子,演示了如何在多个线程之间共享数据,并使用事件对象控制线程的执行流程。

import threading
import time

event = threading.Event()
count = 0

def worker():
    global count
    print('Worker start...')
    while True:
        if event.is_set():
            count += 1
            print('Worker count: %d' % count)
        else:
            print('Worker paused.')
        time.sleep(1)

t = threading.Thread(target=worker)
t.start()

while True:
    cmd = input('Enter command:')
    if cmd == 'q':
        event.set()
        t.join()
        break
    elif cmd == 'p':
        event.clear()
        print('Paused.')
    elif cmd == 'r':
        event.set()
        print('Resumed.')
    else:
        print('Unknown command.')

在上面的例子中,我们创建了一个名为 worker 的函数,表示工作线程。在工作线程中,我们使用了一个 while 循环,这个循环在等待一个事件对象的设置,如果事件对象被设置,那么就会累加一个计数器变量,然后输出计数器的值。

在主线程中,我们用一个 while 循环读取用户的输入。如果用户输入 'q',那么就会设置事件对象并等待工作线程结束。如果用户输入 'p',那么就会清除事件对象,让工作线程暂停执行。如果用户输入 'r',那么就会设置事件对象,让工作线程继续执行。运行上面的代码,可以看到如下输出结果:

Worker start...
Enter command:r
Resumed.
Worker count: 1
Worker count: 2
Enter command:p
Paused.
Worker paused.
Enter command:r
Resumed.
Worker count: 3
Worker count: 4
Enter command:q

可以看到,工作线程开始执行后会输出一些内容。在主线程中,我们输入 'r' 使工作线程恢复执行,然后输出了两个计数器的值。接着,我们输入 'p' 使工作线程暂停执行,然后输出了一条提示信息。最后,我们输入 'r' 使工作线程恢复执行,然后输出了另外两个计数器的值。最后,我们输入 'q' 退出程序。

相关文章