在python中,多个线程之间的数据是共享的,多个线程进行数据交换的时候,不能够保证数据的安全性和一致性,所以当多个线程需要进行数据交换的时候,队列就出现了,队列可以完美解决线程间的数据交换,保证线程间数据的安全性和一致性
queue是python中的标准库,可以直接import 引用
queue模块有三种队列及构造函数:
Python queue模块的FIFO队列先进先出。 class queue.Queue(maxsize)
LIFO类似于堆,即先进后出。 class queue.LifoQueue(maxsize)
还有一种是优先级队列级别越低越先出来。 class queue.PriorityQueue(maxsize)
queue模块中的常用方法:
queue.qsize() 返回队列的大小 queue.empty() 如果队列为空,返回True,反之False queue.full() 如果队列满了,返回True,反之False queue.full 与 maxsize 大小对应 queue.get([block[, timeout]])获取队列,timeout等待时间 queue.get_nowait() 相当queue.get(False) queue.put(item) 写入队列,timeout等待时间 queue.put_nowait(item) 相当queue.put(item, False) queue.task_done() 在完成一项工作之后,queue.task_done()函数向任务已经完成的队列发送一个信号 queue.join() 实际上意味着等到队列为空,再执行别的操作
下面我们来一起看看实例
#!/usr/bin/python3
#coding:utf-8
from queue import Queue
import pymysql
def connectMysql():
conn = False
try:
conn = pymysql.Connect(host='127.0.0.1', port=3306, user='root', passwd='Zero20ba', db='sulao', charset='utf8')
except:
print("Connect MySQL failed !")
conn = False
return conn
def getList():
cur = connectMysql().cursor()
sql = '''SELECT * FROM zbp_category WHERE cate_Order=0 ORDER BY cate_ID ASC'''
cur.execute(sql)
dat = cur.fetchall()
return dat
if __name__ == "__main__":
q = Queue()
for tu in getList():
q.put(tu)
print(q.qsize())打印返回12
我们试试task_done()和join()两个方法
#!/usr/bin/python3
#coding:utf-8
from queue import Queue
import pymysql
def connectMysql():
conn = False
try:
conn = pymysql.Connect(host='127.0.0.1', port=3306, user='root', passwd='Zero20ba', db='sulao', charset='utf8')
except:
print("Connect MySQL failed !")
conn = False
return conn
def getList():
cur = connectMysql().cursor()
sql = '''SELECT * FROM zbp_category WHERE cate_Order=0 ORDER BY cate_ID ASC'''
cur.execute(sql)
dat = cur.fetchall()
return dat
if __name__ == "__main__":
q = Queue()
for tu in getList():
q.put(tu)
while q.qsize() > 0:
_task = q.get()
print(_task)
q.task_done()
q.join()
print("ok !")使用q.join()方法感觉和多线程阻塞是一样的,队列完成后再执行下一步操作,再while循环中没执行完操作使用task_done()返回一个信号来执行下步操作

内容版权声明:除非注明,否则皆为本站原创文章。
转载注明出处:https://sulao.cn/post/552
评论列表