python 里有一個 threading 模塊,其中提供了一個函數: threading.Thread(target=function, args=(), kwargs={}) function 是開發者定義的線程函數, args 是傳遞給線程函數的參數,必須是tuple類型, kwargs 是可 ...
python 里有一個 threading 模塊,其中提供了一個函數:
threading.Thread(target=function, args=(), kwargs={})
function 是開發者定義的線程函數,
args 是傳遞給線程函數的參數,必須是tuple類型,
kwargs 是可選參數,字典類型。
調用 threading.Thread 之後,會創建一個新的線程,參數 target 指定線程將要運行的函數,args 和 kwargs 則指定函數的參數來執行
function 函數。
改寫一下前面的代碼,將抓取的部分放在一個函數中:
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') # 沒有’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()
之後,程式採用了三個迴圈,在第一個迴圈中,針對每一個城市,都創建了一個新線程,並將線程加入到一個列表中,用於之後的啟動。
threads = [] cities = ['北京', '南京', '上海', '深圳', '廣州', '杭州', '蘇州', '天津', '西安', '成都'] files = range(len(cities))for i in files: # 創建線程 t = threading.Thread(target=get_weather, args=(cities[i],)) threads.append(t)
在第二個迴圈中,start 正式開啟子線程;
for i in files: threads[i].start()
在第三個迴圈中,join 用來同步數據,主線程運行到這一步,將會停下來等待子線程運行完畢。沒有這句,主線程則會忽略子線程,運行
完自己的代碼後結束程式。
for i in files:
threads[i].join()
最後註意:光理論是不夠的。這裡順便送大家一套2020最新python入門到高級項目實戰視頻教程,可以去小編的Python交流.裙 :七衣衣九七七巴而五(數字的諧音)轉換下可以找到了,還可以跟老司機交流討教!
本文的文字及圖片來源於網路加上自己的想法,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯繫我們以作處理。