threading
在处理多并发问题时,我们通常使用多线程进行处理,Python 实现多线程编程需要借助于 threading 模块
基本使用
threading 模块中最核心的内容是 Thread 这个类
每个对象都代表一个线程,平时我们直接运行的部分就是主线程
Thread 的构造方法中,最重要的参数是 target
我们使用target将线程的目标指定出来(一个函数)
要让一个 Thread 对象启动,调用它的 start() 方法就可以了
thread = threading.Thread(target=test,name='name')
thread.start()
threading.active_count
表示目前已经运行了多少个线程
threading.enumerate
运行的线程有哪些
threading.current_thread
表示当前运行的线程是哪个
join功能
在start之后,在某处插入了.join(),则从此处开始至子线程中止都阻塞主线程,执行完当前任务后再继续进行主线程的任务
Queue功能
我们的线程无法得到返回值
所以我们要使用的话
我们就要先定义出一个队列
def job(data,q):
for i in range(len(data)):
data[i] = data[i]**2
q.put(l)
def multithreading(data):
q = Queue()
threads = []
data = [[1,2,3],[3,4,5],[4,4,4],[5,5,5]]
for i in range(4):
t = threading.Thread(target = job,args=(data[i],q))
t.start()
threads.append(t)
for thread in threads:
thread.join()
results = []
for _ in range(4):
results.append(q.get())
多线程的效率问题
多线程的任务分配并不是平均分配
使用GIL分配方式
同一时间只有一个线程在进行,节省效率是因为读写可以与其他线程的运算同时进行
LOCK
锁的功能
lock = threading.Lock()
lock.acquire()
|运行|
lock.release()
锁的意义就在于多个线程在对共享数据进行修改时,为了让数据同步做的锁定,让线程获得后进行即可
详细查阅 http://www.runoob.com/python3/python3-multithreading.html
评论 (0)