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

本文详细介绍了Python中多线程与多进程的应用技巧,包括如何开启线程与进程,使用同步锁防止数据冲突,避免死锁的方法,以及通过Event对象实现线程间的通信。此外还介绍了线程队列的使用场景。

 

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

转载于:https://www.cnblogs.com/aland-1415/p/7197021.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值