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使用win32com库播放mp3文件的方法
May 30 Python
Python之两种模式的生产者消费者模型详解
Oct 26 Python
python批量修改文件夹及其子文件夹下的文件内容
Mar 15 Python
Python生成指定数量的优惠码实操内容
Jun 18 Python
Numpy的简单用法小结
Aug 28 Python
Python中的单下划线和双下划线使用场景详解
Sep 09 Python
Python自动生成代码 使用tkinter图形化操作并生成代码框架
Sep 18 Python
Python 图像对比度增强的几种方法(小结)
Sep 25 Python
Python爬取英雄联盟MSI直播间弹幕并生成词云图
Jun 01 Python
Python实现的扫码工具居然这么好用!
Jun 07 Python
Python 的 sum() Pythonic 的求和方法详细
Oct 16 Python
Python进程间的通信之语法学习
Apr 11 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发送有附件的电子邮件-(PHPMailer使用的实例分析)
2013/04/26 PHP
基于PHP静态类的原罪详解
2013/05/06 PHP
thinkPHP实现瀑布流的方法
2014/11/29 PHP
PHP如何通过AJAX方式实现登录功能
2015/11/23 PHP
php实现的一段简单概率相关代码
2016/05/30 PHP
不错的JS中变量相关的细节分析
2007/08/13 Javascript
基于jquery的一个简单的脚本验证插件
2010/04/05 Javascript
javascript 通用简单的table选项卡实现
2010/05/07 Javascript
JS读取cookies信息(记录用户名)
2012/01/10 Javascript
Jquery的hover方法让鼠标经过li时背景变色
2013/09/06 Javascript
判断及设置浏览器全屏模式
2014/04/20 Javascript
JQuery右键菜单插件ContextMenu使用指南
2014/12/19 Javascript
Javascript中的Callback方法浅析
2015/03/15 Javascript
用nodejs搭建websocket服务器
2017/01/23 NodeJs
JavaScript实现向select下拉框中添加和删除元素的方法
2017/03/07 Javascript
angularJS的radio实现单项二选一的使用方法
2018/02/28 Javascript
在vue项目中引入highcharts图表的方法(详解)
2018/03/05 Javascript
使用 Vue cli 3.0 构建自定义组件库的方法
2019/04/30 Javascript
解决elementui表格操作列自适应列宽
2020/12/28 Javascript
原生js中运算符及流程控制示例详解
2021/01/05 Javascript
用python + hadoop streaming 分布式编程(一) -- 原理介绍,样例程序与本地调试
2014/07/14 Python
Python中的XML库4Suite Server的介绍
2015/04/14 Python
python实现字符串连接的三种方法及其效率、适用场景详解
2017/01/13 Python
Python closure闭包解释及其注意点详解
2019/08/28 Python
python PIL/cv2/base64相互转换实例
2020/01/09 Python
OpenCV 表盘指针自动读数的示例代码
2020/04/10 Python
python环境搭建和pycharm的安装配置及汉化详细教程(零基础小白版)
2020/08/19 Python
Booking.com美国:全球酒店预订网站
2017/04/18 全球购物
新电JAVA笔试题目
2014/08/31 面试题
《燕子专列》教学反思
2014/02/21 职场文书
农村结婚典礼司仪主持词
2014/03/14 职场文书
七匹狼男装广告词
2014/03/21 职场文书
《夹竹桃》教学反思
2014/04/20 职场文书
解除劳动合同证明书
2014/09/26 职场文书
优秀工作者事迹材料
2014/12/26 职场文书
Python NumPy灰度图像的压缩原理讲解
2021/08/04 Python