import?_thread # 引入線程包
成都創(chuàng)新互聯(lián)是一家專業(yè)提供柏鄉(xiāng)企業(yè)網(wǎng)站建設(shè),專注與網(wǎng)站建設(shè)、網(wǎng)站設(shè)計、H5響應(yīng)式網(wǎng)站、小程序制作等業(yè)務(wù)。10年已為柏鄉(xiāng)眾多企業(yè)、政府機構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)的建站公司優(yōu)惠進(jìn)行中。
# 1. 定義線程
def 線程1名字():
# 在這個地方寫線程1要干嘛......
def 線程2名字():
# 在這個地方寫線程2要干嘛......
def 線程3名字():
# 在這個地方寫線程3要干嘛......
# 以此類推....
# 2. 啟動這些線程
_thread.start_new_thread(線程1名字,())
_thread.start_new_thread(線程2名字,())
_thread.start_new_thread(線程3名字,())
# 以此類推....
# 啟動之后這些線程都是同時執(zhí)行的
# 如果某個線程函數(shù)有參數(shù)需要傳入,可使用:
_thread.start_new_thread(某線程名字,(參數(shù)1,參數(shù)2...) )
在Python中可使用的多線程模塊主要有兩個,thread和threading模塊。thread模塊提供了基本的線程和鎖的支持,建議新手不要使用。threading模塊允許創(chuàng)建和管理線程,提供了更多的同步原語。
thread模塊函數(shù):
start_new_thread(function, args[, kwargs]):啟動新的線程以執(zhí)行function,返回線程標(biāo)識。
allocate_lock():返回LockType對象。
exit():拋出SystemExit異常,如果沒有被捕獲,線程靜默退出。
LockType類型鎖對象的方法:
acquire([waitflag]):無參數(shù),無條件獲得鎖,如果鎖已經(jīng)被其他線程獲取,則等待鎖被釋放。如果使用整型參數(shù),參數(shù)為0,如果鎖可獲取,則獲取且返回True,否則返回False;參數(shù)為非0,與無參數(shù)相同。
locked():返回鎖的狀態(tài),如果已經(jīng)被獲取,則返回True,否則返回False。
release():釋放鎖。只有已經(jīng)被獲取的鎖才能被釋放,不限于同一個線程。
threading模塊提供了更好的線程間的同步機制。threading模塊下有如下對象:
Thread
Lock
RLock
Condition
Event
Semaphore
BoundedSemaphore
Timer
threading模塊內(nèi)還有如下的函數(shù):
active_count()
activeCount():返回當(dāng)前alive的線程數(shù)量
Condition():返回新的條件變量對象
current_thread()
currentThread():返回當(dāng)前線程對象
enumerate():返回當(dāng)前活動的線程,不包括已經(jīng)結(jié)束和未開始的線程,包括主線程及守護(hù)線程。
settrace(func):為所有線程設(shè)置一個跟蹤函數(shù)。
setprofile(func):為所有純種設(shè)置一個profile函數(shù)。
更多Python知識請關(guān)注Python自學(xué)網(wǎng)
一共是20個線程
執(zhí)行次序的話, 有可能是相互交叉的,不一定是依次執(zhí)行
還要注意python的線程有時被稱為偽線程
如果是同一包里面,直接就可以使用,如果不是同一個包,那么需要先import后,通過“包名.類名”才能使用。 下面是同一個包里面的案例: def a(): print(1) def b(): a() print (2) b()
看下面的代碼? 你就理解了,至于業(yè)務(wù)邏輯自己去實現(xiàn)
#?coding:utf-8
import?threading
if?__name__?==?"__main__":
??obj={'test':'關(guān)于python多線程問題求解'}
??t?=?threading.Thread(target=Run_One,?args=(obj,))
??t.setDaemon(False)
??t.start()
def?Run_One(objvalue):
ls_threadone?=?[]??#?線程集合
???for?i?in?range(1,?8):
???t?=?threading.Thread(target=Run_Two,?args=(i,?objvalue))
???t.setDaemon(False)
???t.start()
???
???ls_threadone.append(t)
???for?t?in?ls_threadone:
???t.join()?#等待所有線程執(zhí)行完畢??如果禁用?那么直接向下執(zhí)行
print("線程全部執(zhí)行完畢")
def?Run_Two(types,?dataList):
print("多個參數(shù)傳遞")