Python爬虫之多线程浅谈

一、多任务引入

  1、多任务

    a>多任务的概念:计算机同时执行多个任务,多任务程序:该程序的多个任务同时在运行,就是多任务

    b>多任务的作用:1、提升程序的执行效率

             2、更充分利用CPU的资源

  2、并行与并发

    并行:当任务数小于或者等于CPU核数时,每一个任务都有对应的CPU来处理执行,即任务真的是一起执行的

    并发:任务数多于CPU核数,通过操作系统的各种任务调度算法,实现用多个任务“一起”执行(实际上总有一些任务不在执行,因为切换任务的速度相当快,看上去一起执行而已)

二、多线程实现多任务

  1、对线程的理解:

    1、一个程序运行起来至少有一个进程,一个进程至少有一个线程

    2、处理器CPU分配给线程,即CPU真正运行的是线程中的代码

    3、分配CPU给线程时,是通过时间片轮训方式进行的

    4、进程是操作系统分配程序执行资源的单位,而线程是进程的一个实体,是CPU调度和分配的单位

  2、两种创建多线程的方式:

    a>创建函数并且传入Thread对象中

      实现步骤:

       1、导入模块threading

        2、准备函数

        3、通过threading.Thread()创建线程对象

           4、执行新创建的线程对象

                   参考代码如下:

            

            

    b>创建Thread类子类,将要执行的代码写到run函数里面

    实现步骤:

          1、导入模块Threading

           2、创建类,继承threading.Thread

           3、重新run方法,把线程要执行的代码封装到该方法中

           4、执行线程

    参考代码如下:

           

           

三、线程注意点:

  1、子线程的开启与结束

    当调用了start方法后,就开启了子线程,且立即执行子线程中的代码,当子线程代码执行完毕后,立即结束子线程

  2、主线程在所有子线程都结束完毕后,主线程才会结束

  3、Thread.join()与threading.enumerate()

    前者是阻塞当前线程(主线程),当前子线程执行完毕,再解阻塞对应的主线程,执行当前线程后续代码

五、多线程-共享全局变量

  如果多个线程同时对同一个全局变量操作,会出现资源竞争问题,从而数据结果会不正确,即会遇到线程安全问题

六、同步的概念

  同步(synchronize)

  协同步调,按预定的先后次序进行运行,比如:一个任务执行完,另一个任务再执行

  在多线程编程中,一些敏感数据不允许被多个线程同时访问,因为会出现线程安全问题,通过线程同步机制,能保证共享数据在任何时刻,最多有一个线程访问,以保证数据的正确性,线程同步,就是线程排队

七、互斥锁

  1、互斥锁是线程同步的一种实现方法

  2、实现互斥锁步骤:

    1、取得锁:

      mutexlock=threading.lock()

    2、加锁

      mutexlock.acquire()

    3、解锁,释放锁

      mutexlock.release()

猜你喜欢

转载自www.cnblogs.com/python58/p/10426493.html