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() 接受一个优先级参数,根据优先级大小决定顺序;