python多執行緒之事件Event的使用詳解

2022-10-04 19:48:13 字數 3234 閱讀 7833

前言

小夥伴a,b,c圍著吃火鍋,當菜上齊了,請客的主人說:開吃!,於是小夥伴一起動筷子,這種場景如何實現

event(事件)

event(事件):事件處理的機制:全域性定義了乙個內建標誌flag,如果flag值為 false,那麼當程式執行 event.wait方法時就會阻塞,如果flag值為true,那麼event.wait 方法時便不再阻塞。

event其實就是乙個簡化版的 condition。event沒有鎖,無法使執行緒進入同步阻塞狀態。

event()

event案例1

場景:小夥伴a和b準備就緒,當收到通知event.set()的時候,會執行a和b執行緒

# coding:utf-8

import threading

import time

event = threading.event()

def chihuoguo(name):

# 等待事件,進入等待阻塞狀態www.cppcns.com

print '%s 已經啟動' % threading.currentthread().getname()

print '小夥伴 %s 已經進入就餐狀態!'%name

time.sleep(1)

event.wait()

# 收到事件後進入執行狀態

print '%s 收到通知了.' % threading.currentthread().getname()

print '小夥伴 %s 開始吃咯!'%name

# 設定執行緒組

threads =

# 建立新執行緒

thread1 = threading.thread(target=chihuoguo, args=("a", ))

thread2 = threading.thread(target=chihuoguo, args=("b", ))

# 新增到執行緒組

threads.append(thread1)

threads.append(thread2)

# 開啟執行緒

for thread in threads:

thread.start()

time.sleep(0.1)

# 傳送事件通知

print '主線程通知小夥伴開吃咯!'

event.set()

執行結果:

thread-1 已經啟動

小夥伴 a 已經進入就餐狀態!

thread-2 已經啟動

小夥伴 b 已經進入就餐狀態!

主線程通知小夥伴開吃咯!

thread-1 收到通知了.

小夥伴 a 開始吃咯!

thread-2 收到通知了.

小夥伴 b 開始吃咯!

event案例2

場景:當小夥伴a,b,c集結完畢後,請客的人發話:開吃咯!

# coding:utf-8

import threading

import time

event = threading.event()

def chihuoguo(name):

# 等待事件,進入等待阻塞狀態

print '%s 已經啟動' % threading.currentthread().getname()

print '小夥伴 %s 已經進入就餐狀態!'%name

time.sleep(1)

event.wait()

# 收到事件後進入執行狀態

print '%s 收到通知了.' % threading.currentthread().getname()

print '%s 小夥伴 %s 開始吃咯!'%(time.time(), name)

cla程式設計客棧ss mythread (threading.thread): # 繼承父類threading.thread

def __init__(self, name):

'''重寫threading.thread初始化內容'''

threading.thread.__init__(self)

self.people = name

def run(self): # 把要執行的**寫到run函式裡面www.cppcns.com 執行緒在建立後會直接執行run函式

'''重寫run方法'''

chihuoguo(self.people) # 執行任務

print("qq***:226296743")

print("結束執行緒: %s" % threading.currentthread().getname())

# 設定執行緒組

threads =

# 建立新執行緒

thread1 = mythread("a")

thread2 = mythread("b")

thread3 = mythread("c")

# 新增到執行緒組

threads.append(thwww.cppcns.comread1)

threads.append(thread2)

threads.append(thread3)

# 開啟執行緒

for thread in threads:

thread.start()

time.sleep(0.1)

# 傳送事件通知

print '集合完畢,人員到齊了,開吃咯!'

event.set()

執行結果:

thread-1 已經啟動

小夥伴 a 已經進入就餐狀態!

thread-2 已經啟動

小夥伴 b 已經進入就餐狀態!

thread-3 已經啟動

小夥伴 c 已經進入就餐狀態!

集合完畢,人員到齊了,開吃咯!

thread-1 收到通知了.

1516780957.47 小夥伴 a 開始吃咯!

qq***:226296743

結束執行緒: thread-1

thread-3 收到通知了.

1516780957.47 小夥伴 c 開始吃咯!thread-2 收到通知了.

qq***:226296743

1516780957.47 小夥伴 b 開始吃咯!結束執行緒: thread-3

qq***:226296743

結束執行緒: thread-2

本文標題: python多執行緒之事件event的使用詳解

本文位址: /jiaoben/python/226491.html

Qt 多執行緒之逐執行緒事件迴圈

從別的執行緒中訪問qobject子類 qobject和所有它的子類是非執行緒安全的。這包括整個的事件投遞系統。需要牢記的是,當你正從別的執行緒中訪問物件時,事件迴圈可以向你的qobject子類投遞事件。假如你呼叫乙個不生存在當前執行緒中的qobject子類的函式時,你必須用mutex來保護qobje...

Python多執行緒之event

事件 event 用於執行緒間同步和通訊。比如執行緒a要完成某一任務 event 執行緒b才能執行後面的 怎麼實現呢,就是用event。event常用方法 釋義set 開始乙個事件 wait 如果未設定set狀態會一直等待,否則過 clear 清除set狀態 isset 是否設定set狀態 注意 w...

Python多執行緒之threading

1.多執行緒的基礎函式及增加執行緒add thread import threading 1.基礎函式 def main print threading.active count 列印目前程序的數目 print threading.enumerate 檢視程序列表 print threading.c...