マルチスレッド
同期オブジェクト
この問題を解決しますか?
実行するために他のスレッドに移動し、実行前のスレッドを指定したいです
エッセンス次のように
#event = threading.Event()
# event.isSet():返回event的状态值;
#
# event.wait():如果 event.isSet()==False将阻塞线程;
#
# event.set(): 设置event的状态值为True,所有阻塞池的线程激活进入就绪状态, 等待操作系统调度;
#
# event.clear():恢复event的状态值为False。
import threading
import time
ll=[]
class Boss(threading.Thread):
def run(self):
print("老板说今天23:00下班")
print(event.is_set())
time.sleep(1)
event.set()
time.sleep(6)
print("老板说时间到了下班")
event.set()
class Worker(threading.Thread):
def run(self):
event.wait()
print("员工说:不要加班啊!!")
event.clear()
event.wait()
print("员工说:下班下班!")
if __name__ == '__main__':
event = threading.Event()
boss=Boss()
ll.append(boss)
for i in range(5):
i=Worker()
ll.append(i)
for z in ll:
z.start()
セマフォ
ロックと等価では複数のスレッドを同期することができます
出力プリント5つのスレッド:出力
import threading
import time
class zx(threading.Thread):
def run(self):
semaphore.acquire()
time.sleep(3)
print(self.name)
semaphore.release()
if __name__ == '__main__':
thr=[]
semaphore=threading.Semaphore(5)
for i in range(100):
i=zx()
i.start()
スレッド1
スレッド4
スレッド2
、スレッド3
スレッド5
スレッド-6-
スレッド9
スレッド-7
スレッド8
スレッド10
....
キューキュー
リストはスレッドセーフではありません
キューは、スレッドセーフであります
これは、複数のスレッドが問題なくデータにアクセスすることができます
キューにアクセスするには、3つの方法があります。
1.先入れ先出し
2.最後のアウト
3.優先順位
import queue
q=queue.Queue()
q.put("sad")
q.put("123")
q.put("sady7854")
while 1:
print(q.get())
悲しい
123
sady7854
データが挿入されると、キューがいっぱいである、彼はデフォルトを与えられていない、堆積物中に出て待っています、あなたはエラーを設定することができます
データがないときにデータを取ったとき、彼は、預金を待ち、その後、デフォルトではエラーではありませんが削除されます
プロデューサーの消費者モデル(キュー)
たとえば、次のように棚にパンアウトの生産は、顧客が来て、彼らが買いました。棚同等のキュー
コードは、簡単な例を実装して理解するために、完璧ではありません
import queue
import threading
import random
import time
def producer(name):
while 1:
print(f"{name}正在制作包子")
t=random.randint(1,4)
time.sleep(t)
bao_zi_que.put("包子")
print("新出炉的包子哟!")
bao_zi_que.task_done()#通知join有内容了,不用等待了
time.sleep(0.5)
def customer(name):
while 1:
print(f"{name}在等待包子")
bao_zi_que.join()
bao_zi_que.get()
time.sleep(1)
print(f"{name}吃掉了包子")
bao_zi_que=queue.Queue()
if __name__ == '__main__':
print("欢迎来到源氏百年包子店")
A=threading.Thread(target=producer,args=("包子老板",))
B=threading.Thread(target=customer,args=("zx",))
C=threading.Thread(target=customer,args=("wl",))
D=threading.Thread(target=customer,args=("125",))
A.start()
B.start()
C.start()
D.start()
源氏世紀のパン屋へようこそ
パンのボスは饅頭作っている
ZX待っパンは
パン待っWL
125待っパン
焼きたてのパンのよ!
ボスはバンズバンズの作っている
ZX食べ饅頭
パンを待っZXを
焼きたてのパンよ!
ボスはバンズバンズが作って
食べ饅頭WL
パン待っWL
たてのパンのヨーヨーを焼きを!
蒸しパンのボスが作って
食べた125個のまんじゅう
125個の待っパン
焼きたてのパンのよ!
ボスはバンズバンズの作っている
ZX食べ饅頭
パンを待っZXを
焼きたてのパンよ!
ボスはバンズバンズが作って
食べ饅頭WL
パン待っWL
たてのパンのヨーヨーを焼きを!
ボスは、パンのパンを作っています