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

2023-12-15Python编程
357

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' 退出程序。

The End

相关推荐

解析Python中的eval()、exec()及其相关函数
Python中有三个内置函数eval()、exec()和compile()来执行动态代码。这些函数能够从字符串参数中读取Python代码并在运行时执行该代码。但是,使用这些函数时必须小心,因为它们的不当使用可能会导致安全漏洞。...
2023-12-18 Python编程
117

Python下载网络文本数据到本地内存的四种实现方法示例
在Python中,下载网络文本数据到本地内存是常见的操作之一。本文将介绍四种常见的下载网络文本数据到本地内存的实现方法,并提供示例说明。...
2023-12-18 Python编程
101

Python 二进制字节流数据的读取操作(bytes与bitstring)
来给你详细讲解下Python 二进制字节流数据的读取操作(bytes与bitstring)。...
2023-12-18 Python编程
120

Python3.0与2.X版本的区别实例分析
Python 3.x 是 Python 2.x 的下一个重大版本,其中有一些值得注意的区别。 Python 3.0中包含了许多不兼容的变化,这意味着在迁移到3.0之前,必须进行代码更改和测试。本文将介绍主要的差异,并给出一些实例来说明不同点。...
2023-12-18 Python编程
34

python如何在终端里面显示一张图片
要在终端里显示图片,需要使用一些Python库。其中一种流行的库是Pillow,它有一个子库PIL.Image可以加载和处理图像文件。要在终端中显示图像,可以使用如下的步骤:...
2023-12-18 Python编程
91

Python图像处理实现两幅图像合成一幅图像的方法【测试可用】
在Python中,我们可以使用Pillow库来进行图像处理。具体实现两幅图像合成一幅图像的方法如下:...
2023-12-18 Python编程
103