0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

python创建多线程的两种方法

python爬虫知识分享 来源:python爬虫知识分享 作者:python爬虫知识分享 2022-03-15 16:47 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

1. 用函数创建多线程

Python3中,Python提供了一个内置模块 threading.Thread,可以很方便地让我们创建多线程。

threading.Thread() 一般接收两个参数:

线程函数名:要放置线程让其后台执行的函数,由我们自已定义,注意不要加()

线程函数的参数:线程函数名所需的参数,以元组的形式传入。若不需要参数,可以不指定。

举个例子

import time
from threading import Thread

# 自定义线程函数。
def target(name="Python"):
    for i in range(2):
        print("hello", name)
        time.sleep(1)

# 创建线程01,不指定参数
thread_01 = Thread(target=target)
# 启动线程01
thread_01.start()


# 创建线程02,指定参数,注意逗号
thread_02 = Thread(target=target, args=("MING",))
# 启动线程02
thread_02.start()

可以看到输出

hello Python
hello MING
hello Python
hello MING

2. 用类创建多线程

相比较函数而言,使用类创建线程,会比较麻烦一点。

首先,我们要自定义一个类,对于这个类有两点要求,

必须继承 threading.Thread 这个父类;

必须复写 run 方法。

这里的 run 方法,和我们上面线程函数的性质是一样的,可以写我们的业务逻辑程序。在 start() 后将会调用。

来看一下例子 为了方便对比,run函数我复用上面的main

import time
from threading import Thread

class MyThread(Thread):
    def __init__(self, type="Python"):
        # 注意:super().__init__() 必须写
        # 且最好写在第一行
        super().__init__()
        self.type=type

    def run(self):
        for i in range(2):
            print("hello", self.type)
            time.sleep(1)

if __name__ == '__main__':
    # 创建线程01,不指定参数
    thread_01 = MyThread()
    # 创建线程02,指定参数
    thread_02 = MyThread("MING")

    thread_01.start()
    thread_02.start()

当然结果也是一样的。

hello Python
hello MING
hello Python
hello MING

3. 线程对象的方法

上面介绍了当前 Python 中创建线程两种主要方法。

创建线程是件很容易的事,但要想用好线程,还需要学习线程对象的几个函数。

经过我的总结,大约常用的方法有如下这些:

# 如上所述,创建一个线程
t=Thread(target=func)

# 启动子线程
t.start()

# 阻塞子线程,待子线程结束后,再往下执行
t.join()

# 判断线程是否在执行状态,在执行返回True,否则返回False
t.is_alive()
t.isAlive()

# 设置线程是否随主线程退出而退出,默认为False
t.daemon = True
t.daemon = False

# 设置线程名
t.name = "My-Thread"

审核编辑:符乾江
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 多线程
    +关注

    关注

    0

    文章

    279

    浏览量

    20919
  • python
    +关注

    关注

    57

    文章

    4858

    浏览量

    89617
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    多线程的系统

    多线程系统的事件响应也是在中断中完成的,但事件的处理是在线程中完成的。在多线程系统中,线程跟中断一样,也具有优先级,优先级高的线程会被优先执
    发表于 12-08 07:55

    Linux多线程对比单线程的优势

    :「资源利用率」:通过多线程,可以更有效地利用CPU资源,特别是多核CPU。「并行处理」:线程允许同时执行多个任务,提高程序的执行效率。「简化设计」:使用线程可以简化程序设计,因为线程
    发表于 12-01 06:11

    用PLC实现卷径计算的两种算法

    卷径计算,是动态计算如钢卷,纸卷等存料量的一种方法,它是实现张力控制和自动充放料、以及甩尾控制的重要前提。卷径计算目前主流的方法两种,一种是根据机列速度(产线速度)和和被测卷的转动角速度求得;另一种是根据被测卷的转动圈数和测长
    的头像 发表于 11-14 16:54 1416次阅读
    用PLC实现卷径计算的<b class='flag-5'>两种</b>算法

    rt-thread studio 如何进行多线程编译?

    ,使用的是5800h+32g内存+sn550 ssd,开启16线程编译时cpu的占用率也只能到30%,编译完整个工程需要3分钟 感觉多线程编译设置没有生效,有办法提高编译速度吗 rtthread studio版本是 2.2.9
    发表于 10-11 09:16

    RT-Thread Nano移植后动态创建线程创建不了怎么解决?

    RT-Thread Nano 移植后动态创建线程创建不了,静态可以.直接烧录DEMO也一样,将RT_USING_HEAP开起来,使用动态创建创建
    发表于 09-19 06:28

    rtth studio中nano 如何创建动态线程

    有没有大佬,可以说一下为什么静态线程可以正常使用,动态线程怎么也使用不了。 具体需要什么配置才能使用动态线程创建。谢谢!
    发表于 09-11 06:01

    【HZ-T536开发板免费体验】—— linux创建线程

    的执行任务成为单线程多线程是程序中包含多个执行流,在一个程序中可以同时运行多个不同的线程来执行不同的任务。 多线程提高了CPU的使用卤率。多线程
    发表于 09-01 21:31

    rtt studio中nano 如何创建动态线程

    有没有大佬,可以说一下为什么静态线程可以正常使用,动态线程怎么也使用不了。 具体需要什么配置才能使用动态线程创建。谢谢!
    发表于 08-22 06:19

    多线程的安全注意事项

    多线程安全是指多个线程同时访问或修改共享资源时,能够保证程序的正确性和可靠性。 开发者选择TaskPool或Worker进行多线程开发时,在TaskPool和Worker的工作线程中导
    发表于 06-20 07:49

    RT-Thread Nano移植后动态创建线程创建不了怎么处理?

    RT-Thread Nano移植后动态创建线程创建不了,静态可以.直接烧录DEMO也一样,将RT_USING_HEAP开起来,使用动态创建创建
    发表于 06-11 06:36

    六相永磁同步电机串联系统控制的两种方法分析研究

    /simulink环境下,分别用这两种方法台电机串联系统的运行特性进行仿真研究。当其中一台电机转速、负载变化时,分析两种方法下另外一台电机独立运行的情况,脸证分析这两种方法的可行性
    发表于 06-10 13:09

    一种实时多线程VSLAM框架vS-Graphs介绍

    针对现有VSLAM系统语义表达不足、地图可解释性差的问题,本文提出vS-Graphs,一种实时多线程VSLAM框架。该方案显著提升了重建地图的语义丰富度、可解释性及定位精度。实验表明
    的头像 发表于 04-19 14:07 741次阅读
    一种实时<b class='flag-5'>多线程</b>VSLAM框架vS-Graphs介绍

    请问如何在Python中实现多线程与多进程的协作?

    大家好!我最近在开发一个Python项目时,需要同时处理多个任务,且每个任务需要不同的计算资源。我想通过多线程和多进程的组合来实现并发,但遇到了一些问题。 具体来说,我有个任务,一个是I/O密集型
    发表于 03-11 06:57

    创建了用于OpenVINO™推理的自定义C++和Python代码,从C++代码中获得的结果与Python代码不同是为什么?

    创建了用于OpenVINO™推理的自定义 C++ 和 Python* 代码。 在个推理过程中使用相同的图像和模型。 从 C++ 代码中获得的结果与 Python* 代码不同。
    发表于 03-06 06:22

    请问rt-thread studio如何进行多线程编译?

    ,使用的是5800h+32g内存+sn550 ssd,开启16线程编译时cpu的占用率也只能到30%,编译完整个工程需要3分钟 感觉多线程编译设置没有生效,有办法提高编译速度吗
    发表于 02-19 08:30