資訊內容
通俗易懂的理解Python中的多線程
ASr少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺
python 里有一個 threading 模塊,其中提供了一個函數:ASr少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺
threading.Thread(target=function, args=(), kwargs={})function 是開發者定義的線程函數,ASr少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺
args 是傳遞給線程函數的參數,必須是tuple類型,ASr少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺
kwargs 是可選參數,字典類型。ASr少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺
調用 threading.Thread 之后,會創建一個新的線程,參數 target 指定線程將要運行的函數,args 和 kwargs 則指定函數的參數來執行 ASr少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺
function 函數。ASr少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺
改寫一下前面的代碼,將抓取的部分放在一個函數中:ASr少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺
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()之后,程序采用了三個循環,在第一個循環中,針對每一個城市,都創建了一個新線程,并將線程加入到一個列表中,用于之后的啟動。ASr少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺
threads = [] cities = ['北京', '南京', '上海', '深圳', '廣州', '杭州', '蘇州', '天津', '西安', '成都'] files = range(len(cities))for i in files: # 創建線程 t = threading.Thread(target=get_weather, args=(cities[i],)) threads.append(t)在第二個循環中,start 正式開啟子線程;ASr少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺
for i in files: threads[i].start()在第三個循環中,join 用來同步數據,主線程運行到這一步,將會停下來等待子線程運行完畢。沒有這句,主線程則會忽略子線程,運行ASr少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺
完自己的代碼后結束程序。ASr少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺
for i in files: threads[i].join()
- 上一篇
java爬蟲與python爬蟲對比
簡介java爬蟲與python爬蟲的對比:python做爬蟲語法更簡單,代碼更簡潔。java的語法比python嚴格,而且代碼也更復雜示例如下:url請求:java版的代碼如下:public String call (String url){  
- 下一篇
都是第一次玩DeepFakes
簡介python視頻教程欄目介紹DeepFakes。目標之前沒碰過DeepFakes,突然想發B站視頻玩兒一下。試了試還挺麻煩的,這里記錄一下自己踩的坑。本文的目標就是將TheSingingTrump的視頻換成我們的川建國同志。最后效果:視頻鏈接:https://www.bilibili.com/vid