執行緒的建立與多執行緒

2021-10-07 23:37:54 字數 3931 閱讀 6829

多執行緒執行緒建立的方式(一)

【使用此方式建立的執行緒為守護執行緒】

import _thread

import threading

deffn1

(a,b)

:print

(a,b)

print

(threading.current_thread(

).name)

defcreate_thread1()

:#引數一:在子執行緒中要執行的函式

#引數二:子執行緒中的函式需要的引數,注意一定要以元組的形式傳參

#使用此種方式建立的執行緒為守護執行緒,守護執行緒的特點是,當主線程結束,守護執行緒無論執行完畢都會結束

_thread.start_new_thread(fn1,

("hello"

,"yes"))

if __name__ ==

"__main__"

: create_thread1(

)print

(threading.current_thread(

).name)

#注意此時建立的執行緒中的**不會執行,原因是

#主線程執行的速度非常快,主線程執行結束,就直接退出了,因此我們的子執行緒根本不會被建立

#我們可以讓主線程阻塞一段時間可以檢視一下效果

#time.sleep(3) #這時候我們就可以檢視列印的資料了

守護執行緒:子執行緒會隨著主線程的結束而結束。

執行緒建立的方式(二)

import threading

deffunc1

(*args)

:print

(args)

print

(threading.current_thread(

).name)

defcreate_thread2()

:#target:在子執行緒中要執行的函式

#deamo:是否為守護執行緒

#name:執行緒名稱

t=threading.thread(target=func1,deamo=

false

,name=

"big"

,args=

("hello"))

t.start(

)#啟動執行緒

if __name__ ==

"__main__"

: create_thread2(

)

執行緒建立的方式(三)
import threading

class

mythread

(threading.thread)

:def

__init__

(self)

:super()

.__init__(

)#一定要重寫此方法,此方法會自動被呼叫

#裡面的子執行緒

defrun

(self)

:print

("mythread"

,threading.current_thread(

).name)

defcreate_thread3()

: t = mythread(

) t.run(

)if __name__ ==

"__main__"

: create_thread3(

)

注意一般情況下使用第二種建立方式比較常用

thread(group=

none

, target=

none

, name=

none

, args=()

, kwargs=

)   group: 執行緒組,目前還沒有實現,庫引用中提示必須是none;

target: 要執行的方法;

name: 執行緒名;

args/kwargs: 要傳入方法的引數。

例項方法: 

isalive(

): 返回執行緒是否在執行。正在執行指啟動後、終止前。

get/setname(name)

: 獲取/設定執行緒名。

start(

): 執行緒準備就緒,等待cpu排程

is/setdaemon(

bool

): 獲取/設定是後台執行緒(預設前台執行緒(false))。(在start之前設定)

#如果是後台執行緒,主線程執行過程中,後台執行緒也在進行,主線程執行完畢後,後台執行緒不論成功與否,主線程和後台執行緒均停止

#如果是前台執行緒,主線程執行過程中,前台執行緒也在進行,主線程執行完畢後,等待前台執行緒也執行完成後,程式停止

join(

[timeout]

): 阻塞當前上下文環境的執行緒,直到呼叫此方法的執行緒終止或到達指定的timeout(可選引數)。

乙個程序執行時產生了多個執行緒。

import threading,time,random

deffun

(*args)

: time.sleep(random.randint(1,

4))print

("子執行緒"

,args)

if __name__ ==

"__main__"

:#多個執行緒同時執行,是非同步執行

t1 = threading.thread(target=fn,args=

("包餃子",)

) t1.start(

)# t1.join() 會阻塞 等待t1執行緒執行完成後再繼續往後執行

t2 = threading.thread(target=fn,args=

("甜馨",)

) t2.start(

) t3 = threading.thread(target=fn,args=

("嗯哼",)

) t3.start(

)#若多個執行緒想讓其按順序執行,則可以使用join() 的方法

迴圈建立執行緒

import threading,time,random

deffun

(*args)

: time.sleep(random.randint(1,

4))print

("子執行緒"

,args)

if __name__ ==

"__main__"

: start = time.time(

) t_list=

for x in

range(10

):t1 = threading.thread(target=fn,args=

(x,)

) t1.start(

)#當前執行緒的名稱

print

(threading.current_thread(

).name)

#執行緒id

print

(t.ident)

#執行緒是否正在執行

print

(t.is_alive())

#正在執行執行緒的數量,包括主線程

print

(threading.active_count())

#列舉當前正在執行的所有的執行緒

print

(threading.

enumerate()

)for t in t_list:

t.join(

)print

(time.time(

)-start)

多執行緒 執行緒與程序 執行緒排程 建立執行緒

步驟 定義thread類的子類,並重寫該類的run 方法,該run 方法的方法體就代表了執行緒需要完成的任務,因此把run 方法稱為執行緒執行體。建立thread子類的例項,即建立了執行緒物件 呼叫執行緒物件的start 方法來啟動該執行緒 測試 自定義執行緒類 public class mythr...

多執行緒學習 建立執行緒

執行緒的建構函式 public thread public thread runnable target public thread string name public thread runnable target,string name public thread threadgroup gro...

C 多執行緒 建立執行緒

c 中線程的建立一般是通過std thread類實現的,具體的實現方式有以下幾種 void operator int a 過載括號運算子。如果無參則為void operator 這裡有兩種方法通過成員函式建立。而這兩種方法恰好也就是靜態成員函式和非靜態成員函式的區別。靜態成員函式與物件無關,只屬於類...