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中cPickle用法例子分享
Jan 03 Python
在GitHub Pages上使用Pelican搭建博客的教程
Apr 25 Python
简单实现python爬虫功能
Dec 31 Python
Python中使用多进程来实现并行处理的方法小结
Aug 09 Python
Python爬虫的两套解析方法和四种爬虫实现过程
Jul 20 Python
python将txt文件读入为np.array的方法
Oct 30 Python
python解析含有重复key的json方法
Jan 22 Python
python 使用装饰器并记录log的示例代码
Jul 12 Python
python实现文件的分割与合并
Aug 29 Python
浅谈在django中使用filter()(即对QuerySet操作)时踩的坑
Mar 31 Python
Django 后台带有字典的列表数据与页面js交互实例
Apr 03 Python
Python爬虫破解登陆哔哩哔哩的方法
Nov 17 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
PHP脚本数据库功能详解(下)
2006/10/09 PHP
PHP header()函数使用详细(301、404等错误设置)
2013/04/17 PHP
PHP中的事务使用实例
2015/05/26 PHP
解决nginx不支持thinkphp中pathinfo的问题
2015/07/21 PHP
PHP构造函数与析构函数用法示例
2016/09/28 PHP
JavaScript实用技巧(一)
2010/08/16 Javascript
javascript禁用Tab键脚本实例
2013/11/22 Javascript
探讨jQuery的ajax使用场景(c#)
2013/12/03 Javascript
js function定义函数的几种不错方法
2014/02/27 Javascript
javaScript基础语法介绍
2015/02/28 Javascript
js库Modernizr的介绍和使用
2015/05/07 Javascript
Javascript中的async awai的用法
2017/05/17 Javascript
JavaScript学习总结之正则的元字符和一些简单的应用
2017/06/30 Javascript
jQuery简介_动力节点Java学院整理
2017/07/04 jQuery
微信小程序之绑定点击事件实例详解
2017/07/07 Javascript
如何使node也支持从url加载一个module详解
2018/06/05 Javascript
微信小程序wx.uploadfile 本地文件转base64的实现代码
2018/06/28 Javascript
vuex实现购物车功能
2020/06/28 Javascript
vue-cli打包后本地运行dist文件中的index.html操作
2020/08/12 Javascript
Python 不同对象比较大小示例探讨
2014/08/21 Python
Python、Javascript中的闭包比较
2015/02/04 Python
Python的Bottle框架中返回静态文件和JSON对象的方法
2015/04/30 Python
Django与JS交互的示例代码
2017/08/23 Python
python中Lambda表达式详解
2019/11/20 Python
用Python 爬取猫眼电影数据分析《无名之辈》
2020/07/24 Python
CSS3网格的三个新特性详解
2014/04/04 HTML / CSS
深入浅析CSS3中的Flex布局整理
2020/04/27 HTML / CSS
韩国休闲女装品牌网站:ANAIS
2016/08/24 全球购物
戴尔荷兰官方网站:Dell荷兰
2020/10/04 全球购物
婚礼证婚人证婚词
2014/01/08 职场文书
ktv中秋节活动方案
2014/01/30 职场文书
幼儿园中班下学期评语
2014/04/18 职场文书
小学三年级学生评语
2014/04/22 职场文书
教师查摆问题自查报告
2014/10/11 职场文书
故意伤害罪辩护词
2015/05/21 职场文书
2015年小学总务工作总结
2015/07/21 职场文书