• Python多线程的用法


    多线程类似于同时执行多个不同程序,多线程运行有如下优点:
    ● 使用线程可以把占据长时间的程序中的任务放到后台去处理。
    ● 用户界面可以更加吸引人,比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进度条来显示处理的进度。
    ● 程序的运行速度可能加快。
    ● 在一些等待的任务实现上如用户输入、文件读写和网络收发数据等,线程就比较有用了。在这种情况下我们可以释放一些珍贵的资源如内存占用等等。
    线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。每个线程都有他自己的一组CPU寄存器,称为线程的上下文,该上下文反映了线程上次运行该线程的CPU寄存器的状态。
    Python3通过两个标准库_thread和threading提供对线程的支持。
    _thread提供了低级别的、原始的线程以及一个简单的锁,它相比于threading模块的功能还是比较有限的。threading模块除了包含_thread模块中的所有方法外,还提供的其他方法:
    ● threading.currentThread():返回当前的线程变量。
    ● threading.enumerate():返回一个包含正在运行的线程的list。正在运行指线程启动后、结束前,不包括启动前和终止后的线程。
    ● threading.activeCount():返回正在运行的线程数量,与len(threading.enumerate())有相同的结果。
    除了使用方法外,线程模块同样提供了Thread类来处理线程,Thread类提供了以下方法:
    ● run():用以表示线程活动的方法。
    ● start():启动线程活动。
    ● join([time]):等待至线程中止。这阻塞调用线程直至线程的join()方法被调用中止-正常退出或者抛出未处理的异常-或者是可选的超时发生。
    ● isAlive():返回线程是否活动的。
    ● getName():返回线程名。
    ● setName():设置线程名。

    import threading
    import time
    
    exitFlag = 0
    
    
    class myThread(threading.Thread):
        def __init__(self, threadID, name, counter):
            threading.Thread.__init__(self)
            self.threadID = threadID
            self.name = name
            self.counter = counter
    
        def run(self):
            print("开始线程:" + self.name)
            print_time(self.name, self.counter, 5)
            print("退出线程:" + self.name)
    
    
    def print_time(threadName, delay, counter):
        while counter:
            if exitFlag:
                threadName.exit()
            time.sleep(delay)
            print("%s: %s" % (threadName, time.ctime(time.time())))
            counter -= 1
    
    
    # 创建新线程
    thread1 = myThread(1, "Thread-1", 1)
    thread2 = myThread(2, "Thread-2", 2)
    
    # 开启新线程
    thread1.start()
    thread2.start()
    thread1.join()
    thread2.join()
    print("退出主线程")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38

    在这里插入图片描述

  • 相关阅读:
    Android 移动安全攻防实战 第一章
    1、网页结构
    ACMG 2.0 支持零信任网络模式
    [附源码]计算机毕业设计JAVAjsp校园活动募集平台
    分布式事务的解决方案
    软件测试/测试开发/人工智能丨 利用ChatGPT编写测试用例
    FedEx联邦快递查询寄件电子面单API接口接入教程-快递100API(以国际电子面单接口为例)
    Java核心编程(12)
    工作中常用数据统计分析手段
    python调用SDK的问题
  • 原文地址:https://blog.csdn.net/weixin_40653652/article/details/126907860