from queue import Queue
import threading
import time
from openpyxl import load_workbook
class test_q(object):
def __init__(self):
self.q1 = Queue()
self.q2 = Queue()
self.q3 = Queue()
# 队列一种放入数据
def put_data_1(self):
i = 0
while i < 100000:
self.q1.put(str(i))
i += 1
# 从队列q1中取出数据,并放入队里q2
def worker1(self):
while True:
num1 = self.q1.get()
if num1:
print('从q1中拿到的数据是11111111111%s' % num1)
self.q2.put('放入q2数据%s' % num1)
self.q1.task_done()
# 从队列q2中取出数据放入q3
def worker2(self):
while True:
re_num = self.q2.get()
if re_num:
print('从q2中拿到数据是22222222222222%s' % re_num)
self.q3.put('放入3的数据%s' % re_num)
self.q2.task_done()
# 从队列q3中取出数据写入excel表格
def worker3(self, table, loc):
while True:
loc.acquire()
res_3 = self.q3.get()
if res_3:
print('从q3中取出的数据333333******%s' % res_3)
# with open('G:\\vw\zmyw_test.txt', 'a+', encoding='utf8') as f:
# f.write(res_3+'\n')
table.append([res_3])
self.q3.task_done()
loc.release()
def run(self):
# 线程列表
thread_list = []
# 队列q1放入数据的线程
q1_t = threading.Thread(target=self.put_data_1)
thread_list.append(q1_t)
# 从队列q1取出数据放入q2的线程
q2_t = threading.Thread(target=self.worker1)
thread_list.append(q2_t)
# 从队列q2中取出数据放入q3的线程
q3_t = threading.Thread(target=self.worker2)
thread_list.append(q3_t)
# 打开excel表格
open_excel = load_workbook('G:\\vw\zmyw_test.xlsx')
table = open_excel['Sheet1']
# 从队列q3中取出数据写入excel表格
loc = threading.Lock()
for i in range(5):
w_excel = threading.Thread(target=self.worker3, args=(table,loc))
thread_list.append(w_excel)
for i in thread_list:
print('开启线程')
i.setDaemon(True)
i.start()
for j in [self.q1, self.q2, self.q3]:
print('_____')
j.join()
print('***************')
open_excel.save('G:\\vw\zmyw_test.xlsx')
if __name__=='__main__':
te = test_q()
te.run()