【18.5 python中创建线程】

python中创建线程

在Python中,创建线程主要通过threading模块来实现。这个模块提供了两种主要的方式来创建线程:直接使用threading.Thread类,以及通过继承threading.Thread类并覆写其run方法来创建自定义的线程类。下面分别介绍这两种方法。

1. 使用threading.Thread模块创建线程

这是最直接且常用的方法。你只需创建一个threading.Thread的实例,并将要在线程中执行的函数作为target参数传递给构造函数。然后,调用该实例的start()方法来启动线程。

import threading
import time

# 定义要在线程中执行的函数
def worker(num):
    """线程工作函数"""
    print(f'Worker: {num}')
    time.sleep(2)  # 模拟耗时操作
    print(f'Worker {num} finished')

# 创建线程
t1 = threading.Thread(target=worker, args=(1,))
t2 = threading.Thread(target=worker, args=(2,))

# 启动线程
t1.start()
t2.start()

# 等待线程完成(实际上在这个简单的例子中,主线程在启动两个子线程后就会立即继续执行,直到脚本结束)
# 在实际应用中,你可能需要在这里加入一些逻辑来等待所有线程完成,比如使用t1.join()和t2.join()

2. 使用Thread子类创建线程

另一种方法是通过继承threading.Thread类来创建自定义的线程类。在这个自定义类中,你需要覆写(override)run方法,该方法将包含线程执行时应当执行的代码。然后,你可以创建这个类的实例并调用其start()方法来启动线程。

import threading
import time

# 继承自threading.Thread的自定义线程类
class MyThread(threading.Thread):
    def __init__(self, num):
        super().__init__()  # 调用父类的初始化方法
        self.num = num

    def run(self):
        """线程执行的代码放在这里"""
        print(f'Starting MyThread: {self.num}')
        time.sleep(2)  # 模拟耗时操作
        print(f'MyThread {self.num} finished')

# 创建自定义线程类的实例
t1 = MyThread(1)
t2 = MyThread(2)

# 启动线程
t1.start()
t2.start()

# 等待线程完成(同样,这里可能需要使用join方法来等待所有线程完成)

在这两种方法中,第二种方法(使用Thread子类)提供了更高的灵活性和可重用性,尤其是当你需要在多个地方使用具有相似行为但可能稍有不同的线程时。然而,对于简单的任务,直接使用threading.Thread类并传递一个函数作为target参数通常更加快捷和方便。

请注意,在两种方法中,都需要调用线程的start()方法来启动线程。调用start()方法后,Python解释器会自动调用线程对象的run()方法来执行线程的任务。你不应该直接调用run()方法,因为这样做不会启动新线程,而是会在当前线程中同步执行run()方法中的代码。

  • 8
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wang151038606

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值