Python執行緒合併和後台執行緒

2021-08-10 21:46:10 字數 1886 閱讀 8968

threading.event可以使乙個執行緒等待其他執行緒的通知。其內建了乙個標誌,初始值為false。執行緒通過wait()方法進入等待狀態,直到另乙個執行緒呼叫set()方法將內建標誌設定為true時,event通知所有等待狀態的執行緒恢復執行。還可以通過isset()方法查詢envent物件內建狀態的當前值。

import threading

import random

import time

class mythread(threading.thread):

def __init__(self,threadname,event):

threading.thread.__init__(self,name=threadname)

self.threadevent=event

def run(self):

print '%s is ready'%self.name

self.threadevent.wait()

print "%s run"%self.name

sinal=threading.event()

for i in range(10):

t=mythread(str(i),sinal)

t.start()

sinal.set()

執行緒的合併:

python的thread類中還提供了join()方法,使得乙個執行緒可以等待另乙個執行緒執行結束後再繼續執行。這個方法還可以設定乙個timeout引數,避免無休止的等待。因為兩個執行緒順序完成,看起來象乙個執行緒,所以稱為執行緒的合併。乙個例子:

import threading

import random

import time

class mythread(threading.thread):

def run(self):

wait_time=random.randrange(1,10)

print '%s will wait %d seconds'%(self.name,wait_time)

time.sleep(wait_time)

print "%s finished"%self.name

if __name__=='__main__':

thrads=

for i in range(5):

t=mythread()

t.start()

print 'main thread is waiting for exit....'

for t in threads:

t.join(1)

print 'main thread finished'

後台執行緒:

import threading

import random

import time

class mythread(threading.thread):

def run(self):

wait_time=random.randrange(1,10)

print '%s will wait %d seconds'%(self.name,wait_time)

time.sleep(wait_time)

print '%s finished'%self.name

if __name__=='__main__':

print 'main thread is waitting for exit..'

for i in range(5):

t=mythread()

t.setdaemon(true)

t.start()

print 'main thread finished'

後台執行緒 守護執行緒

有一種執行緒,它是在後台執行的,它的任務是為其他的執行緒提供服務,這種執行緒被稱為 後台執行緒 daemon thread 又稱為 守護執行緒 典型的後台執行緒是定時器 timer 執行緒,他負責將固定的時間間隔傳送給其他的執行緒。後台執行緒經常用於任務結束時的善後處理。另外,後台執行緒的優先順序要...

Python合併和拆分excel

當前目錄 og dir cwd origin 存放待合併的excel og ls os.listdir og dir 所有excel名稱 cb name combine.xlsx 合併後的檔名 合併 放置待拆分的excel 限1個 fname b dir os.listdir b dir 0 待拆分...

Python 執行緒,前台執行緒,後台執行緒生命週期

import threading import time import win32api 引用系統函式 class mythread threading.thread 繼承threading.thread def run self run重寫,win32api.messagebox 0,你的賬戶很危...