隨著計算機科學的不斷發展,多線程編程已經成為熱門話題,因為它可以提高程序的執行效率,使得程序更加快速。而在Python中,線程間通訊(Thread Communication)是多線程編程中的重要概念。
Python線程是輕量級的,因此它們可以在操作系統級別進行交互, Python提供了幾種方法來實現線程間通訊,包括 shared data(共享數據), message passing(消息傳遞)以及 synchronization primitives(同步機制)。
import threading mutex = threading.Lock() count = 0 class MyThread(threading.Thread): def __init__(self, threadName, startCount): threading.Thread.__init__(self, name=threadName) self.startCount = startCount def run(self): global count while True: mutex.acquire() count += self.startCount print('Count:', count) mutex.release()
在上述Python線程代碼片段中,我們使用了threading包來創建MyThread類,并定義了全局變量count和鎖(mutex)。在MyThread的run()方法中,我們使用acquire()獲取鎖,然后將count的值增加,然后在控制臺上打印信息,最后使用release()釋放鎖。
在Python中,線程間通訊可以使用Queue類來實現,它是一個結構化的線程安全隊列,可以讓線程安全地交換對象。
import threading import queue q = queue.Queue(maxsize=10) def worker(): while True: item = q.get() print(f'Thread: {threading.current_thread().name} got {item}') q.task_done() threading.Thread(target=worker, daemon=True).start() for item in range(20): q.put(item) print('All task requests sent') q.join() print('All work received and done')
在上面的代碼片段中,我們使用了一個daemon線程來執行worker()函數,它被用于從隊列中獲取數據,并打印線程名(使用current_thread()函數獲取當前的線程名)。我們通過使用q.put()函數將數據放到隊列中,并使用q.task_done()函數通知隊列有一項任務已經執行完畢。在主線程中,我們通過使用join()函數等待隊列中所有任務完成,最后在控制臺上打印一條成功的信息。