正式的Python專欄第48篇,同學站住,別錯過這個從0開始的文章!
前面分享了threading.Event類,它維持了一個信號(True/False)狀態,
像田徑跑道上蹲在起點的運動員,不分先后,同時聽到槍響就開跑,用這個類來做很適合,
模擬:發出一聲槍響
當然不是真的有槍響,而且代碼呼叫Event類的物件實體的set函式,
因為Event類的函式是執行緒安全的,所以我們可以把運動員看成一個一個的執行緒,并排在跑道起點,
所以這個思路代碼就有了
for _ in range(n):
def run():
wait for event ready
run
threading.Thread(target=run).start()
稍微寫好一點,代碼最終如下:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2021/11/27 10:43 下午
# @Author : LeiXueWei
# @CSDN/Juejin/Wechat: 雷學委
# @XueWeiTag: CodingDemo
# @File : thread_event.py
# @Project : hello
import threading
import time
xuewei_event = threading.Event()
print("event:", xuewei_event)
print("is_set:", xuewei_event.is_set())
def run():
print(" %s ready" % threading.current_thread().name)
xuewei_event.wait()
print(" %s go" % threading.current_thread().name)
time.sleep(0.5)
print(" %s completed" % threading.current_thread().name)
threads = []
for i in range(4):
t_name = "t-" + str(i)
t = threading.Thread(name=t_name, target=run)
threads.append(t)
t.start()
# 學委提示:賽場鳴槍,運動員開跑
for i in [3, 2, 1]:
print("學委倒數 count %s" % i)
time.sleep(1)
xuewei_event.set()
print("is_set:", xuewei_event.is_set())
for t in threads:
t.join()
這是運行結果:

多執行緒還有點意思
看看上面的代碼,學委還模擬了3/2/1倒數,再開槍,
如圖所示,多個執行緒都聽到這個槍響不約而同的喊出了‘go’,最后不同時間達到終點了,
編程還是挺好玩的, 喜歡Python的朋友,請關注學委的 Python基礎專欄 or Python入門到精通大專欄
持續學習持續開發,我是雷學委!
編程很有趣,關鍵是把技術搞透徹講明白,
歡迎關注微信,點贊支持收藏!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/395130.html
標籤:python
