• Python3 多线程编程(thread、threading模块)


    threading是对thread的封装。

    1、开启线程:

        t=threading.Thread(target=sayhi,args=('hh',))
        t.start()

    或者先建一个Thread的继承类,然后用这个类中的start()方法打开;

    2、主进程下开启子进程:

        t=multiprocessing.Process(target=work)
        t.start()

       程序会先执行主程序的语句,再执行此子进程的目标函数work();

    3、t.setDadmon() 设置守护进程;必须在start()之前设置;如果为True则主程序不用等此线程结束后再结束主程序;

    1 t.join()                 等待线程结束;
    2 t.isAlive()              返回线程是否活动;
    3 t.getName()               返回线程名。
    4 t.setName()               设置线程名。
    5 threading.currentThread()    返回当前线程变量;
    6 threading.enumerate()        返回一个包含正在运行线程的列表;
    7 threading.activeCount()      返回正在运行的线程数量;
    8 threading.Semaphore(5)       限制最大连接数为5,semaphore是一个acquire,release的计数器;

    多线程用于IO密集型,如socket,爬虫,web

    多进程用于计算密集型,如金融分析

    4、同步锁

    R=threading.Lock()
    R.acquire()
    '''
    对公共数据的操作
    '''
    R.release()

    用于对共享资源同步访问的限制,只有当一个线程访问完毕后另一个线程才能访问。

    5、死锁

    使用RLock()代替Lock()可解决,因为RLock()使资源可以被多次acquire,但只有直到一个线程所有的acquire都被release之后其他线程才能获得资源。

    而使用Semaphore(n)则可限制资源的同时最大可访问线程数;

    6、Event对象

    用于多线程之间的通信和同步,初始情况下event对象中信号标志为False;

    Event对象方法:

    1 isSet()          返回event的状态值;
    2 wait()           如果event.isSet() == False 将阻塞线程,即等待;
    3 set()          设置event的状态值;
    4 clear()          恢复event的状态值为False; 

    7、线程queue

    实例queue.Queue()    先进先出;

    实例queue.LifoQueue()      后进先出;

    实例queue.PriorityQueeu() 接受一个优先级参数,根据优先级大小决定顺序;

  • 相关阅读:
    Ajax的技术与原理探讨
    Ajax技术与原理
    AJAX原理
    vue中ref的一些常见作用
    表的连接查询
    mysql使其支持插入中文数据的办法
    16 散列表-基于除余留数法与线性探测法的实现
    win10上Tensorflow的安装教程
    哨兵/sentinel:在算法设计中的应用
    快速选择算法/Select 寻找第k大的数
  • 原文地址:https://www.cnblogs.com/aland-1415/p/7197021.html
Copyright © 2020-2023  润新知