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

 

threading是对thread的封装。web

一、开启线程:多线程

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

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

 

二、主进程下开启子进程:函数

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

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

 

三、t.setDadmon() 设置守护进程;必须在start()以前设置;若是为True则主程序不用等此线程结束后再结束主程序;spa

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线程

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

 

四、同步锁对象

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

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

 

五、死锁

使用RLock()代替Lock()可解决,由于RLock()使资源能够被屡次acquire,但只有直到一个线程全部的acquire都被release以后其余线程才能得到资源。

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

 

六、Event对象

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

Event对象方法:

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

七、线程queue

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

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

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

相关文章
相关标签/搜索