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

 

可参考文章:Python3之多线程

posted @ 2017-07-17 18:50  覆手为云p  阅读(23298)  评论(1编辑  收藏  举报
停止精灵球