十年網站開發(fā)經驗 + 多家企業(yè)客戶 + 靠譜的建站團隊
量身定制 + 運營維護+專業(yè)推廣+無憂售后,網站問題一站解決
這篇文章主要講解了解決Python3多線程之間的執(zhí)行順序問題,內容清晰明了,對此有興趣的小伙伴可以學習一下,相信大家閱讀完之后會有幫助。

一個多線程的題:定義三個線程ID分別為ABC,每個線程打印10遍自己的線程ID,按ABCABC……的順序進行打印輸出。
我的解法:
from threading import Thread, Lock
# 由_acquire解鎖執(zhí)行后釋放_release鎖
def _print(_id: str, _acquire: Lock, _release: Lock) -> None:
for i in range(10):
_acquire.acquire()
print(f"id:{_id}")
_release.release()
if __name__ == '__main__':
# 創(chuàng)建三個鎖供3個線程使用
mutex1 = Lock()
mutex2 = Lock()
mutex3 = Lock()
# 定義三個線程A、B、C
# 線程A需要mutex1解鎖執(zhí)行后釋放mutex2
# 線程B需要mutex2解鎖執(zhí)行后釋放mutex3
# 線程C需要mutex3解鎖執(zhí)行后釋放mutex1
# 元組中第一位是自定義的線程ID,第二位是解鎖需要的鎖,第三位是釋放的鎖
threads = [Thread(target=_print, args=[i[0], i[1], i[2]]) for i in
[('A', mutex1, mutex2), ('B', mutex2, mutex3), ('C', mutex3, mutex1)]]
# 把mutex2和mutex3這兩把鎖先用了以便阻塞線程2和線程3的執(zhí)行
mutex2.acquire()
mutex3.acquire()
# 接下來只有線程A可以先執(zhí)行是因為mutex1并沒有被占用
# 線程B和線程C需要分別等待著鎖2和鎖3的釋放才能繼續(xù)執(zhí)行
[thr.start() for thr in threads]
[thr.join() for thr in threads]