Python多线程正确用法实例解析


Posted in Python onMay 30, 2020

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python 命令行非阻塞输入的小例子
Sep 27 Python
python实现的二叉树算法和kmp算法实例
Apr 25 Python
Python 模块EasyGui详细介绍
Feb 19 Python
python的构建工具setup.py的方法使用示例
Oct 23 Python
Python实现通讯录功能
Feb 22 Python
基于python list对象中嵌套元组使用sort时的排序方法
Apr 18 Python
python实现对csv文件的列的内容读取
Jul 04 Python
浅谈Pandas:Series和DataFrame间的算术元素
Dec 22 Python
在python tkinter中Canvas实现进度条显示的方法
Jun 14 Python
python列表推导式入门学习解析
Dec 02 Python
将数据集制作成VOC数据集格式的实例
Feb 17 Python
Python类super()及私有属性原理解析
Jun 15 Python
PyQt5实现简单的计算器
May 30 #Python
PyQt5实现登录页面
May 30 #Python
Python网页解析器使用实例详解
May 30 #Python
PyQt5实现画布小程序
May 30 #Python
Java ExcutorService优雅关闭方式解析
May 30 #Python
Python定时任务APScheduler原理及实例解析
May 30 #Python
Python生成器next方法和send方法区别详解
May 30 #Python
You might like
地摊中国 - 珍藏老照片
2020/08/18 杂记
最简单的PHP程序--记数器
2006/10/09 PHP
用PHP生成静态HTML速度快类库
2007/03/18 PHP
php入门学习知识点四 PHP正则表达式基本应用
2011/07/14 PHP
Laravel中日期时间处理包Carbon的简单使用
2017/09/21 PHP
PHP简单验证码功能机制实例详解
2019/03/27 PHP
PHP如何防止用户重复提交表单
2020/12/09 PHP
添加到收藏夹代码(兼容几乎所有的浏览器)
2007/01/09 Javascript
根据鼠标的位置动态的控制层的位置
2009/11/24 Javascript
一个简单的js动画效果代码
2010/07/20 Javascript
jquery blockUI 遮罩不能消失与不能提交的解决方法
2011/09/17 Javascript
基于jQuery实现下拉收缩(展开与折叠)特效
2012/12/25 Javascript
Visual Studio中js调试的方法图解
2014/06/30 Javascript
JavaScript中逗号运算符介绍及使用示例
2015/03/13 Javascript
JavaScript实现向OL列表内动态添加LI元素的方法
2015/03/21 Javascript
JavaScript性能优化之小知识总结
2015/11/20 Javascript
Jquery easyui开启行编辑模式增删改操作
2016/01/14 Javascript
Javascript字符串拼接小技巧(推荐)
2016/06/02 Javascript
vue-resource拦截器设置头信息的实例
2017/10/27 Javascript
mpvue中配置vuex并持久化到本地Storage图文教程解析
2018/03/15 Javascript
使用Vue-Awesome-Swiper实现旋转叠加轮播效果&平移轮播效果
2019/08/16 Javascript
vue学习笔记之Vue中css动画原理简单示例
2020/02/29 Javascript
es6函数之尾调用优化实例分析
2020/04/25 Javascript
[01:03:47]VP vs NewBee Supermajor 胜者组 BO3 第一场 6.5
2018/06/06 DOTA
Python 数据结构之堆栈实例代码
2017/01/22 Python
Python3中urlencode和urldecode的用法详解
2019/07/23 Python
Python脚本去除文件的只读性操作
2020/03/05 Python
python递归函数用法详解
2020/10/26 Python
MADE荷兰:提供原创设计师家具
2018/04/03 全球购物
国际经济贸易专业推荐信
2013/11/06 职场文书
团日活动策划书
2014/02/01 职场文书
讲座主持词
2014/03/20 职场文书
学雷锋主题班会教案
2015/08/13 职场文书
十大最强妖精系宝可梦,哲尔尼亚斯实力最强,第五被称为大力士
2022/03/18 日漫
【海涛解说】pis亲自推荐,其实你从来不会玩NW
2022/04/01 DOTA
在Python 中将类对象序列化为JSON
2022/04/06 Python