歡迎您光臨本站 註冊首頁

Python多線程正確用法實例解析

←手機掃碼閱讀     qp18502452 @ 2020-06-10 , reply:0

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()

  


[qp18502452 ] Python多線程正確用法實例解析已經有236次圍觀

http://coctec.com/docs/python/shhow-post-237864.html