Python多線程正確用法實(shí)例解析
python 里有一個(gè) threading 模塊,其中提供了一個(gè)函數(shù):
threading.Thread(target=function, args=(), kwargs={})
function 是開(kāi)發(fā)者定義的線程函數(shù),
args 是傳遞給線程函數(shù)的參數(shù),必須是tuple類(lèi)型,
kwargs 是可選參數(shù),字典類(lèi)型。
調(diào)用 threading.Thread 之后,會(huì)創(chuàng)建一個(gè)新的線程,參數(shù) target 指定線程將要運(yùn)行的函數(shù),args 和 kwargs 則指定函數(shù)的參數(shù)來(lái)執(zhí)行
function 函數(shù)。
改寫(xiě)一下前面的代碼,將抓取的部分放在一個(gè)函數(shù)中:
def get_weather(city): req = requests.get(’http://wthrcdn.etouch.cn/weather_mini?city=%s’ % city) dic_city = req.json() city_data = dic_city.get(’data’) # 沒(méi)有’data‘的話返回 [] print(city_data.get(’city’)) if city_data: city_forecast = city_data[’forecast’][0] # 下面的都可以換成’get’方法 print(city_forecast.get(’date’)) print(city_forecast.get(’high’)) print(city_forecast.get(’low’)) print(city_forecast.get(’type’)) else: print(’未獲得’) print()
之后,程序采用了三個(gè)循環(huán),在第一個(gè)循環(huán)中,針對(duì)每一個(gè)城市,都創(chuàng)建了一個(gè)新線程,并將線程加入到一個(gè)列表中,用于之后的啟動(dòng)。
threads = []cities = [’北京’, ’南京’, ’上海’, ’深圳’, ’廣州’, ’杭州’, ’蘇州’, ’天津’, ’西安’, ’成都’]files = range(len(cities))for i in files: # 創(chuàng)建線程 t = threading.Thread(target=get_weather, args=(cities[i],)) threads.append(t)
在第二個(gè)循環(huán)中,start 正式開(kāi)啟子線程;
for i in files: threads[i].start()
在第三個(gè)循環(huán)中,join 用來(lái)同步數(shù)據(jù),主線程運(yùn)行到這一步,將會(huì)停下來(lái)等待子線程運(yùn)行完畢。沒(méi)有這句,主線程則會(huì)忽略子線程,運(yùn)行
完自己的代碼后結(jié)束程序。
for i in files: threads[i].join()
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
1. idea導(dǎo)入maven項(xiàng)目的方法2. idea設(shè)置代碼格式化的方法步驟3. Python和Selenium-未知錯(cuò)誤:在點(diǎn)(663,469)元素不可單擊其他元素將獲得點(diǎn)擊:4. Thinkphp6 配置并使用redis圖文詳解5. springmvc 結(jié)合ajax批量新增的實(shí)現(xiàn)方法6. li中插入img圖片間有空隙的解決方案7. python基礎(chǔ)入門(mén)之普通操作與函數(shù)(三)8. java 利用HttpClient PostMethod提交json數(shù)據(jù)操作9. 概述IE和SQL2k開(kāi)發(fā)一個(gè)XML聊天程序10. 從0到1使用python開(kāi)發(fā)一個(gè)半自動(dòng)答題小程序的實(shí)現(xiàn)
