Python 多執行緒 同步控制 同步物件

2022-07-07 21:00:20 字數 2158 閱讀 1082

當多執行緒同時開始執行的時候,是沒有先後順序的,誰先搶到執行權誰就先執行。

通過event物件可以控制線程優先執行權。

event=threading.event()

event.wait()

#event 被設定,執行緒則阻塞不再繼續執行下去

event.set() #

event 解除設定,被阻塞的執行緒可以繼續執行下去

event.clear() #

如果 event被解除設定後,需要再次設定,則需要先 clear

例子: 控制乙個執行緒先執行, 當他先執行部分任務後進行阻塞等待,並且需要其他執行緒再先執行的時候,則需要使用event控制。

import

threading

import

time

class

boss(threading.thread):

def__init__

(self,thread_name):

threading.thread.

__init__

(self)

self.thread_name=thread_name

defrun(self):

print('

%s:大家今晚需要加班

'%self.thread_name)

event.set()

time.sleep(1)

print('

%s:大家可以下班了

'%self.thread_name)

event.set()

class

worker(threading.thread):

def__init__

(self,thread_name):

threading.thread.

__init__

(self)

self.thread_name=thread_name

defrun(self):

event.wait()

print('

%s:命苦啊

' %self.thread_name)

event.clear()

event.wait()

print('

%s:oh yeah!

' %self.thread_name)

if__name__ == '

__main__':

event=threading.event()

threads=

for i in range(5):

t=worker('

woker%s

'%i)

'boss'))

for t in

threads:

t.start()

for t in

threads:

t.join()

訊號控制量, 即同時可以設定有多少個執行緒執行任務

import

threading

import

time

class

mythread(threading.thread):

def__init__

(self,thread_name):

threading.thread.

__init__

(self)

self.thread_name=thread_name

defrun(self):

ifsemaphore.acquire():

time.sleep(1)

print

(self.thread_name)

semaphore.release()

if__name__ == '

__main__':

semaphore=threading.semaphore(5)

threads=

for i in range(100):

t=mythread('

thread%s

'%i)

for t in

threads:

t.start()

for t in

threads:

t.join()

Python多執行緒同步

1 實現檔案讀寫的檔案ltz schedule times.py usr bin env python coding utf 8 import os def readtimes res if os.path.exists schedule times.txt fp open schedule tim...

python 多執行緒5執行緒同步

互斥鎖是最簡單的執行緒同步機制,python提供的condition物件提供了對複雜執行緒同步問題的支援。condition被稱為條件變數,除了提供與lock類似的acquire和release方法外,還提供了wait和notify方法。執行緒首先acquire乙個條件變數,然後判斷一些條件。如果條...

Python 多執行緒3 同步執行緒

現在假設這樣乙個例子 有乙個全域性的計數num,每個執行緒獲取這個全域性的計數,根據num進行一些處理,然後將num加1。很容易寫出這樣的 encoding utf 8 import threading import time class mythread threading.thread def ...