1. 程式人生 > 程式設計 >Python多執行緒正確用法例項解析

Python多執行緒正確用法例項解析

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。