Python中的多線程如何正確運用?案例詳解

 

python 裏有一個 threading 模塊,其中提供了一個函數:html

threading.Thread(target=function, args=(), kwargs={})

function 是開發者定義的線程函數,python

args 是傳遞給線程函數的參數,必須是tuple類型,json

kwargs 是可選參數,字典類型。網絡

調用 threading.Thread 以後,會建立一個新的線程,參數 target 指定線程將要運行的函數,args 和 kwargs 則指定函數的參數來執行 app

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

以後,程序採用了三個循環,在第一個循環中,針對每個城市,都建立了一個新線程,並將線程加入到一個列表中,用於以後的啓動。spa

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 用來同步數據,主線程運行到這一步,將會停下來等待子線程運行完畢。沒有這句,主線程則會忽略子線程,運行cdn

完本身的代碼後結束程序。

for i in files:
    threads[i].join()

最後注意:光理論是不夠的。這裏順便送你們一套2020最新python入門到高級項目實戰視頻教程,能夠去小編的Python交流.裙 :七衣衣九七七巴而五(數字的諧音)轉換下能夠找到了,還能夠跟老司機交流討教!

本文的文字及圖片來源於網絡加上本身的想法,僅供學習、交流使用,不具備任何商業用途,版權歸原做者全部,若有問題請及時聯繫咱們以做處理。

相關文章
相關標籤/搜索