多线程读写excel

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()

你可能感兴趣的:(Ëexcel,多线程,EXCEL表格读写)