线程间的资源共享
一、互斥锁
共享内存的竞争问题
用锁来控制共享资源的访问
二、队列
互斥锁虽然解决了资源共享的竞争问题,但同时也失去了“多进程“的含义,各个子进程之间变成了顺序执行,而不是同时执行,因此便出现了“队列”,刚好优化了这一弊端。
三、队列的操作
queue.Queue:queue模块下的Queue类
实例1
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# author:DM time:2019/8/2 21:59
from threading import Thread
from queue import Queue
from random import randint
my_queue = Queue(10) # 创建队列对象,指定队列长度
def my_put(my_queue):
"""往队列塞东西"""
for x in range(10):
num = randint(0, 1000)
my_queue.put(num)
def my_get(my_queue):
"""往队列拿东西"""
for y in range(3):
num = my_queue.get()
print(num)
p = Thread(target=my_put, args=(my_queue,))
g = Thread(target=my_get, args=(my_queue,))
p.start()
g.start()
p.join()
g.join()
实例二
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# author:DM time:2019/8/2 22:09
from queue import Queue
my_queue = Queue(3)
if __name__ == '__main__':
my_queue.put(1)
print(my_queue.qsize())
my_queue.get()
print(my_queue.qsize())
print(my_queue.empty())
my_queue.put(1)
my_queue.put(1)
my_queue.put(1)
print(my_queue.full())
my_queue.task_done() # 任务结束
my_queue.task_done() # 任务结束
my_queue.task_done() # 任务结束
my_queue.task_done() # 任务结束
my_queue.join() # 等待完成,用来判断task_done的次数是否和put的次数一致
print("任务结束")