5月30日学习笔记
Thread类的定义
安装pip install threading (好像是内置的)
Thread类定义threading.Thread(self, group=None, target=None, name=None,agrs=(),kwargs=None, *, daemon=None)
参数group是预留的,用于将来扩展;
参数target是一个可调用对象,在线程启动后执行;
参数name是线程的名字。默认值为“Thread-N“,N是一个数字;
参数args和kwargs分别表示调用target时的参数列表和关键字参数。
创建一个Thread类
要创建一个thread类,要从threading.Thread中继承。
例如
import threading
class demo1_thread(threading.Thread):
#run方法,可以将其重写并把要执行的函数放在这
def run(self):
the_thread = threading.current_thread()#current—_thread(),获取当前线程
for x in range(3):
print("%s正在执行..." % the_thread.name)
然后在主函数main中执行start()即可。
给线程上锁
使用锁的原则:
- 把尽量少的和不耗时的代码放到锁中执行。
- 代码执行完成后要记得释放锁。
因为上锁是很占用计算机资源的
threading中内置有Lock用于上锁
gLock = threading.Lock()
value = 0
def add_value():
# 如果在函数中修改了全局变量,那么需要使用
# global关键字进行申明
global value
gLock.acquire()#用于上锁
# gLock.acquire()
for x in range(1000000):
value += 1
gLock.release()#用于释放锁
print("value的值是:%d"%value)
Lock版的生产者和消费者模式
生产者和消费者模式是多线程开发中经常见到的一种模式。生产者的线程专门用来生产一些数据,然后存放到一个中间的变量中。消费者再从这个中间的变量中取出数据进行消费。通过生产者和消费者模式,可以让代码达到高内聚低耦合的目标,程序分工更加明确,线程更加方便管理。说白了就是不同线程共用相同的资源,并借此传递信息。
例
import threading
import random
gMoney = 0
gLock = threading.</