將你需要多線程并發(fā)執(zhí)行的函數(shù)放入list中
創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供永安網(wǎng)站建設(shè)、永安做網(wǎng)站、永安網(wǎng)站設(shè)計、永安網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計與制作、永安企業(yè)網(wǎng)站模板建站服務(wù),10年永安做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡(luò)服務(wù)。
import threading
threads = []
t1 = threading.Thread(target=函數(shù)名,args=參數(shù))
threads.append(t1)
啟動多線程
if __name__ == '__main__':
??? for t in threads:
? ? ??? t.setDaemon(True)
? ? ??? t.start()
t.join()
更多詳細(xì)操作help(threading)
#coding=utf-8
import?threading
from?time?import?ctime,sleep
#?要啟動的函數(shù)
def?music(func):
for?i?in?range(2):
print?"I?was?listening?to?%s.?%s"?%(func,ctime())
sleep(1)
#?要啟動的函數(shù)
def?move(func):
for?i?in?range(2):
print?"I?was?at?the?%s!?%s"?%(func,ctime())
sleep(5)
threads?=?[]
t1?=?threading.Thread(target=music,args=(u'愛情買賣',))
threads.append(t1)
t2?=?threading.Thread(target=move,args=(u'阿凡達(dá)',))
threads.append(t2)
#?函數(shù)加入線程列表
if?__name__?==?'__main__':
for?t?in?threads:
t.setDaemon(True)
t.start()
t.join()?#子線程完成運(yùn)行之前,這個子線程的父線程將一直被阻塞,不會退出
print?"all?over?%s"?%ctime()
# -*- coding: utf-8 -*-
import threading
import thread
import time
class Test(object):
def __init__(self):
# threading.Thread.__init__(self)
self._sName = "machao"
def process(self):
#args是關(guān)鍵字參數(shù),需要加上名字,寫成args=(self,)
th1 = threading.Thread(target=Test.buildList, args=(self,))
th1.start()
th1.join()
def buildList(self):
while True:
print "start"
time.sleep(3)
test = Test()
test.process()
使用線程池:threadpool 模塊。這是一個第三方模塊,可以通過下面方法安裝:
easy_install threadpool
以前在遠(yuǎn)標(biāo)時也遇見過的確有多線程調(diào)用的沖突問題。 通常是初始化一個python解釋器。作為全局變量。然后每個線程分別調(diào)用。
因為python解釋器里有一個GIL的全局鎖。所以要防止線程間因為GIL造成的死鎖。
不過具體的使用方法,與單線程沒有區(qū)別。初始化python解釋器。然后加載腳本,運(yùn)行,取得返回變量就可以了。
如果你使用system,就當(dāng)我沒有說。 即使是使用system,也會有多線程的沖突可能性。因為操作系統(tǒng)的管道管理,相關(guān)文件,相關(guān)數(shù)據(jù)庫,臨時文件等都可能會產(chǎn)生沖突。
如果是同一包里面,直接就可以使用,如果不是同一個包,那么需要先import后,通過“包名.類名”才能使用。 下面是同一個包里面的案例: def a(): print(1) def b(): a() print (2) b()
1.python中數(shù)據(jù)類型,int,float,復(fù)數(shù),字符,元組,做全局變量時需要在函數(shù)里面用global申明變量,才能對變量進(jìn)行操作。
而,對象,列表,詞典,不需要聲明,直接就是全局的。
2.線程鎖mutex=threading.Lock()
創(chuàng)建后就是全局的。線程調(diào)用函數(shù)可以直接在函數(shù)中使用。
mutex.acquire()開啟鎖
mutex=release()關(guān)閉鎖
要注意,死鎖的情況發(fā)生。
注意運(yùn)行效率的變化:
正常1秒,完成56997921
加鎖之后,1秒只運(yùn)行了531187,相差10倍多。
3.繼承.threading.Thread的類,無法調(diào)用__init__函數(shù),無法在創(chuàng)建對象時初始化新建的屬性。
4.線程在cpu的執(zhí)行,有隨機(jī)性
5. 新建線程時,需要傳參數(shù)時,args是一個元組,如果只有一個參數(shù),一定后面要加一個,符號。不能只有一個參數(shù)否則線程會報創(chuàng)建參數(shù)錯誤。threading.Thread(target=fuc,args=(arg,))
文章名稱:python線程調(diào)用函數(shù) python子線程調(diào)用主線程方法函數(shù)
網(wǎng)站地址:http://jinyejixie.com/article34/dochdse.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供ChatGPT、網(wǎng)站制作、網(wǎng)站策劃、域名注冊、外貿(mào)網(wǎng)站建設(shè)、品牌網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)