Python高级编程——多线程

Python 多线程

多线程类似于同时执行多个不同程序,多线程运行有如下优点:

  • 使用线程可以把占据长时间的程序中的任务放到后台去处理。

  • 用户界面可以更加吸引人,这样比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进度条来显示处理的进度

  • 程序的运行速度可能加快

  • 在一些等待的任务实现上如用户输入、文件读写和网络收发数据等,线程就比较有用了。在这种情况下我们可以释放一些珍贵的资源如内存占用等等。

线程在执行过程中与进程还是有区别的。每个独立的进程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
每个线程都有他自己的一组CPU寄存器,称为线程的上下文,该上下文反映了线程上次运行该线程的CPU寄存器的状态。
指令指针和堆栈指针寄存器是线程上下文中两个最重要的寄存器,线程总是在进程得到上下文中运行的,这些地址都用于标志拥有线程的进程地址空间中的内存。

  • 线程可以被抢占(中断)。

  • 在其他线程正在运行时,线程可以暂时搁置(也称为睡眠) – 这就是线程的退让。

python主要是通过threadthreading这两个模块来实现多线程支持。python的thread模块是比较底层的模块,python的threading模块是对thread做了一些封装,可以更加方便的被使用。但是python(cpython)由于GIL的存在无法使用threading充分利用CPU资源,如果想充分发挥多核CPU的计算能力需要使用multiprocessing模块(Windows下使用会有诸多问题)。

  • python3.x中已经摒弃了Python2.x中采用函数式thread模块中的start_new_thread()函数来产生新线程方式。

  • python3.x中通过threading模块创建新的线程有两种方法:一种是通过threading.Thread(Target=executable Method)-即传递给Thread对象一个可执行方法(或对象);第二种是继承threading.Thread定义子类并重写run()方法。第二种方法中,唯一必须重写的方法是run()

python中多线程的操作

import threading
 
import time
 
 
def work():
    time.sleep(3)
    print("正在执行的任务")
    # 激活的线程个数
    print("当前线程的个数:", threading.active_count())
    # 打印当前线程的详细信息
    print("当前线程的信息:", threading.current_thread())
 
if __name__ == "__main__":
    # 运行函数
    work()
    # 创建线程 并开始执行线程
    t1 = threading.Thread(target=work, name="work1", args=())
    t2 = threading.Thread(target=work, name="work2", args=())
    # 使用start方法开始进程
    t1.start()
    t2.start()

join方法: 在使用多线程时,会等使用该方法的待线程结束之后,再执行其他线程,作用就是阻塞正在调用的其它线程。

守护线程set_daemon

锁机制
threading的Lock类,用该类的acquire函数进行加锁,用realease函数进行解锁

暂时到这里吧,后续还会更新

猜你喜欢

转载自blog.csdn.net/Box_sir/article/details/107835605