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远程登录代码
Apr 29 Python
使用Python编写简单网络爬虫抓取视频下载资源
Nov 04 Python
Python实现的列表排序、反转操作示例
Mar 13 Python
python通过http下载文件的方法详解
Jul 26 Python
python中append实例用法总结
Jul 30 Python
Python基本语法之运算符功能与用法详解
Oct 22 Python
基于matplotlib xticks用法详解
Apr 16 Python
Python中关于logging模块的学习笔记
Jun 03 Python
在Keras中CNN联合LSTM进行分类实例
Jun 29 Python
Python特殊属性property原理及使用方法解析
Oct 09 Python
python中zip()函数遍历多个列表方法
Feb 18 Python
Python使用openpyxl模块处理Excel文件
Jun 05 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
example2.php
2006/10/09 PHP
PHP生成二维码的两个方法和实例
2014/07/01 PHP
php使用fopen创建utf8编码文件的方法
2014/10/31 PHP
thinkphp框架下实现登录、注册、找回密码功能
2016/04/06 PHP
PHP后端银联支付及退款实例代码
2017/06/23 PHP
在云虚拟主机部署thinkphp5项目的步骤详解
2017/12/21 PHP
php多进程模拟并发事务产生的问题小结
2018/12/07 PHP
PHP PDOStatement::fetch讲解
2019/01/31 PHP
读jQuery之九 一些瑕疵说明
2011/06/21 Javascript
js setTimeout 参数传递使用介绍
2013/08/13 Javascript
js调用图片隐藏&显示实现代码
2013/09/13 Javascript
web css实现整站样式互相切换
2013/10/29 Javascript
Javascript 高阶函数使用介绍
2015/06/15 Javascript
javascript中判断json的方法总结
2015/08/27 Javascript
基于BootStarp的Dailog
2016/04/28 Javascript
详解如何较好的使用js
2016/12/16 Javascript
详解用node搭建简单的静态资源管理器
2017/08/09 Javascript
nodejs微信扫码支付功能实现
2018/02/17 NodeJs
ES6中Promise的使用方法实例总结
2020/02/18 Javascript
使用vue cli4.x搭建vue项目的过程详解
2020/05/08 Javascript
[01:10]DOTA2次级职业联赛 - U5战队宣传片
2014/12/01 DOTA
[01:15:45]DOTA2上海特级锦标赛B组小组赛#1 Alliance VS Spirit第一局
2016/02/26 DOTA
让python同时兼容python2和python3的8个技巧分享
2014/07/11 Python
Python类的多重继承问题深入分析
2014/11/09 Python
Python实现PS图像调整之对比度调整功能示例
2018/01/26 Python
如何利用pygame实现简单的五子棋游戏
2019/12/29 Python
马德里运动鞋商店:Nigra Mercato
2020/02/16 全球购物
Python面试题:如何用Python来发送邮件
2016/03/15 面试题
区域销售经理职责
2013/12/22 职场文书
事业单位公务员的职业生涯规划
2014/01/15 职场文书
经济信息系毕业生自荐信范文
2014/03/15 职场文书
房地产推广策划方案
2014/05/19 职场文书
省级优秀毕业生主要事迹
2014/05/29 职场文书
暖通工程师岗位职责
2014/06/12 职场文书
2014年班组工作总结
2014/11/20 职场文书
vue里使用create, mounted调用方法
2022/04/26 Vue.js