Python多线程正确用法实例解析
本文详细解析Python中threading模块的使用,重点介绍Thread类的target、args及kwargs参数配置。通过抓取天气数据的实例,演示如何创建线程列表、启动子线程以及利用join方法实现主线程与子线程的同步,确保程序逻辑完整执行。
Python多线程基础与Thread类参数
在Python标准库中,threading模块提供了一个核心函数用于处理多线程任务。
该函数的基本语法为:threading.Thread(target=function, args=(), kwargs={})。
其中,target参数用于指定开发者自定义的线程执行函数。
args参数用于向线程函数传递位置参数,其数据类型必须为元组(tuple)。
kwargs参数为可选配置,用于传递关键字参数,数据类型需为字典(dict)。
实例化threading.Thread后,系统会创建一个新的线程对象。此时,target参数决定了该线程运行的具体函数,而args和kwargs则提供了该函数执行所需的参数。
这一机制确保了线程能够携带特定数据执行预定义的业务逻辑。
多线程实战:线程创建与同步控制
为了演示这一过程,我们将前文提到的数据抓取逻辑封装到一个独立的函数中。
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方法以实现数据同步。当主线程执行到此处时,会暂停自身运行,直到所有子线程执行完毕。
若省略join步骤,主线程将不会等待子线程完成,而是直接执行完剩余代码后结束程序,可能导致结果未完全输出。
for i in files:
threads[i].join()
以上内容涵盖了Python多线程创建与同步的核心要点,希望能为读者的学习提供实用参考,欢迎继续支持本站获取更多技术分享。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









