python中單執行緒重複利用

One of them發表於2018-08-23

使用佇列重複利用單執行緒

# 重複利用的執行緒.   執行緒一般跑完就結束了.
# 即建立一個執行緒, 給一個任務, 執行完後在等待接受下一個任務並執行, 以達到重複利用的目的.
"""
    執行緒重複利用.
    物件 t 為一個執行緒, 執行兩次不同的func 函式任務.
"""
import threading
import queue


class Myth(threading.Thread):
    def __init__(self):
        super().__init__()
        self.daemon = True  # 設定守護模式, 是為了讓程式隨著主程式程式碼執行完而結束, 不然會阻塞.
        self.queue = queue.Queue()  # 建立佇列.
        self.start()  # 在建立物件時, 就啟動這個run(), 如果佇列中沒有東西, 那麼就在get處阻塞.

    def run(self):      # 特定方法名.
        while True:
            func = self.queue.get()  # 獲得物件.
            func()  # call function.
            self.queue.task_done()  # get 然後 task_done

    def apply_async(self, func):    # 特定方法名
        self.queue.put(func)  # put 函式物件.

    def join(self):
        self.queue.join()  # waiting mission done, 不然就阻塞.


def func():
    print("[+] I'm first mission.")


def func2():
    print("[+] I'm second mission.")


if __name__ == '__main__':
    t = Myth()
    t.apply_async(func)  # thread mission 1
    t.apply_async(func2)  # thread mission 2
    t.join()  # call self.queue.join().

相關文章