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 相关文章推荐
Django与遗留的数据库整合的方法指南
Jul 24 Python
Python2.x与Python3.x的区别
Jan 14 Python
利用python生成一个导出数据库的bat脚本文件的方法
Dec 30 Python
Python编程之event对象的用法实例分析
Mar 23 Python
python数字图像处理之高级形态学处理
Apr 27 Python
Python对象与引用的介绍
Jan 24 Python
Python3调用百度AI识别图片中的文字功能示例【测试可用】
Mar 13 Python
python实现倒计时小工具
Jul 29 Python
python基于opencv检测程序运行效率
Dec 28 Python
python实现双色球随机选号
Jan 01 Python
微软开源最强Python自动化神器Playwright(不用写一行代码)
Jan 05 Python
教你怎么用PyCharm为同一服务器配置多个python解释器
May 31 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
第十三节 对象串行化 [13]
2006/10/09 PHP
解决Laravel 不能创建 migration 的问题
2019/10/09 PHP
JavaScript 学习笔记(五)
2009/12/31 Javascript
ExtJs grid行 右键菜单的两种方法
2010/06/19 Javascript
js事件(Event)知识整理
2012/10/11 Javascript
jQuery中andSelf()方法用法实例
2015/01/08 Javascript
15个值得开发人员关注的jQuery开发技巧和心得总结【经典收藏】
2016/05/25 Javascript
学习Angular中作用域需要注意的坑
2016/08/17 Javascript
JS实现动态增加和删除li标签行的实例代码
2016/10/16 Javascript
JavaScript中定义对象原型的两种使用方法
2016/12/15 Javascript
ES6新特性之模块Module用法详解
2017/04/01 Javascript
详解vue的数据劫持以及操作数组的坑
2019/04/18 Javascript
微信小程序订阅消息(java后端实现)开发
2020/06/01 Javascript
JS 数组和对象的深拷贝操作示例
2020/06/06 Javascript
[44:09]DOTA2上海特级锦标赛A组小组赛#1 EHOME VS MVP.Phx第二局
2016/02/25 DOTA
[04:42]5分钟带你了解什么是DOTA2(第一期)
2017/02/07 DOTA
python更新列表的方法
2015/07/28 Python
python 通过可变参数计算n个数的乘积方法
2019/06/13 Python
10 行Python 代码实现 AI 目标检测技术【推荐】
2019/06/14 Python
python多线程并发及测试框架案例
2019/10/15 Python
Python中logging日志库实例详解
2020/02/19 Python
Python 程序报错崩溃后如何倒回到崩溃的位置(推荐)
2020/06/23 Python
Python Tricks 使用 pywinrm 远程控制 Windows 主机的方法
2020/07/21 Python
celery在python爬虫中定时操作实例讲解
2020/11/27 Python
10分钟理解CSS3 FlexBox弹性布局
2018/12/20 HTML / CSS
澳大利亚领先的时尚内衣零售商:Bras N Things
2020/07/28 全球购物
排序都有哪几种方法?请列举。用JAVA实现一个快速排序
2014/02/16 面试题
党员思想汇报范文
2013/12/30 职场文书
新春联欢会主持词
2014/03/24 职场文书
《富饶的西沙群岛》教学反思
2014/04/09 职场文书
计算机应用专业自荐信
2014/07/05 职场文书
资产运营委托书范本
2014/10/16 职场文书
读《工匠精神》有感:热爱工作,精益求精
2019/12/28 职场文书
pytorch中的numel函数用法说明
2021/05/13 Python
vue代码分块和懒加载非必要资源文件
2022/04/11 Vue.js
一次SQL查询优化原理分析(900W+数据从17s到300ms)
2022/06/10 SQL Server