我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Python学习之旅(二十四)

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Python学习之旅(二十四)

一、threadlocal

在多线程环境下,每个线程都有自己的数据

一个线程使用自己的局部变量比使用全局变量好,因为局部变量只有线程自己能看见,不会影响其他线程,而全局变量的修改必须加锁

在函数间一层层调用的时候,使用局部变量很麻烦,使用全局变量无法实现不同对象之间的共享

threadlocal消除了对象在每层函数中的传递问题

ThreadLocal最常用的地方就是为每个线程绑定一个数据库连接,HTTP请求,用户身份信息等,这样一个线程的所有调用到的处理函数都可以非常方便地访问这些资源

二、进程 VS. 线程

要实现多任务,通常我们会设计Master-Worker模式,Master负责分配任务,Worker负责执行任务,因此,多任务环境下,通常是一个Master,多个Worker

如果用多进程实现Master-Worker,主进程就是Master,其他进程就是Worker

如果用多线程实现Master-Worker,主线程就是Master,其他线程就是Worker

(1)多进程模式最大的优点就是稳定性高,因为一个子进程崩溃了,不会影响主进程和其他子进程

它的缺点是创建进程的代价大,在Windows下创建进程开销巨大

另外,操作系统能同时运行的进程数也是有限的,在内存和CPU的限制下,如果有几千个进程同时运行,操作系统连调度都会成问题

(2)多线程模式通常比多进程快一点,多线程模式致命的缺点就是任何一个线程挂掉都可能直接造成整个进程崩溃,因为所有线程共享进程的内存

在Windows上,如果一个线程执行的代码出了问题,你经常可以看到这样的提示:“该程序执行了非法操作,即将关闭”,其实往往是某个线程出了问题,但是操作系统会强制结束整个进程

1、线程切换

假设有A、B、C三个任务,A需要站在梯子上完成,B要坐着完成,C要在水里完成,要完成这三个任务都需要1个小时,如果依次执行这三个线程总共要花3个小时,这种方式称为单任务模型,或者批处理任务模型

线程切换:每个任务来回切换,都执行一点,但线程切换是有代价的

多任务一旦多到一个限度,就会消耗掉系统所有的资源,结果效率急剧下降,所有任务都做不好

2、计算密集型 VS. IO密集型

(1)可以把任务分为计算密集型和IO密集型

(2)计算密集型任务的特点是要进行大量的计算,消耗CPU资源

这种计算密集型任务虽然也可以用多任务完成,但是任务越多,花在任务切换的时间就越多,CPU执行任务的效率就越低

对于计算密集型任务,最好用C语言编写

(3)IO密集型,涉及到网络、磁盘IO的任务都是IO密集型任务,这类任务的特点是CPU消耗很少,任务的大部分时间都在等待IO操作完成

对于IO密集型任务,任务越多,CPU效率越高,但也有一个限度。常见的大部分任务都是IO密集型任务,比如Web应用。

对于IO密集型任务,最合适的语言就是开发效率最高(代码量最少)的语言,脚本语言是首选

3、异步IO

即多进程模型或者多线程模型来支持多任务并发执行

现代操作系统对IO操作已经做了巨大的改进,最大的特点就是支持异步IO

如果充分利用操作系统提供的异步IO支持,就可以用单进程单线程模型来执行多任务,这种全新的模型称为事件驱动模型

在Python语言中,单线程的异步编程模型称为协程,有了协程的支持,就可以基于事件驱动编写高效的多任务程序

三、分布式进程

在Thread和Process中,应当优选Process,因为Process更稳定,而且,Process可以分布到多台机器上,而Thread最多只能分布到同一台机器的多个CPU上

 Python的multiprocessing模块不但支持多进程,其中managers子模块还支持把多进程分布到多台机器上

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Python学习之旅(二十四)

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Python学习之旅(二十四)

一、threadlocal在多线程环境下,每个线程都有自己的数据一个线程使用自己的局部变量比使用全局变量好,因为局部变量只有线程自己能看见,不会影响其他线程,而全局变量的修改必须加锁在函数间一层层调用的时候,使用局部变量很麻烦,使用全局变量
2023-01-30

Python学习之旅(十四)

Python内置函数1、abs:取绝对值abs(-1)12、all:把序列中的每一个元素拿出来做布尔运算,都为真则返回True,如果序列中有None、0、“”、[]、{}、()则返回Falseall([1,23,0])False3、any:
2023-01-30

Python学习之旅(三十四)

UDP编程相对TCP,UDP则是面向无连接的协议使用UDP协议时,不需要建立连接,只需要知道对方的IP地址和端口号,就可以直接发数据包虽然用UDP传输数据不可靠,但它的优点是和TCP比,速度快,对于不要求可靠到达的数据,就可以使用UDP协议
2023-01-30

Python学习之旅(二十五)

正则表达式:检查一个字符串是否与某个模式匹配\d :匹配数字\w :匹配字母或数字. :匹配任意字符{n} :匹配n个字符{m,n} :匹配m到n个字符\s :匹配空格a|b :匹配a或b^ :匹配字符串开头$ :匹配字符串结尾* :匹配0
2023-01-30

Python学习之旅(三十二)

Python内置了turtle库,可以在计算机上绘图运动控制:1、画笔定位到坐标(x,y):turtle.goto(x,y)2、向正方向运动 distance 长的距离:turtle.forward(distance)3、向负方向运动 di
2023-01-30

Python学习之旅(二十九)

一、PillowPIL(Python Imaging Library):提供了强大的图像操作功能,可以通过简单的代码完成复杂的图像处理,是Python平台事实上的图像处理库,支持Python 2.7以及更低的版本Pillow:在PIL基础上
2023-01-30

Python学习之旅(十)

字符串格式化有2种方法:一是用“%”,二是用format。转换标志:,默认右对齐,%后面加上“-”表示左对齐;“+”表示在转换值之前要加上正负号;“ ”(空白符)表示在正数前面保留空格;“0”表示转换值若位数不够用0填充。最小字段宽度(可选
2023-01-30

python学习之旅(十五)

一、装饰器decorator:本质上就是函数,可以增强函数的功能。定义起来虽然有点复杂,但使用起来非常灵活和方便1、不修改被装饰函数的源代码2、不修改被装饰函数的调用方式3、装饰函数对被装饰函数透明import functoolsdef l
2023-01-30

python学习之旅(十六)

1、可以把模块想象成导入Python以增强其功能的扩展2、任何程序都可以作为模块导入3、导入模块并不意味着在导入的时候执行某些操作,它们主要用于定义变量、函数和类等 #hello1.pydef hello(): print("Hell
2023-01-30

Python学习之旅(十一)

一、全局变量和局部变量局部变量:在函数内定义的变量,在函数内使用全局变量:在函数外定义的变量,在程序任何地方都可以使用1、全局变量与局部变量同名这时函数内部只调用局部变量,如果要调用全局变量需要在函数内加一句“global 同名变量”x=1
2023-01-30

python学习之旅(二)

Python基础知识(1)一、变量变量名可以由字母、数字、下划线任意组合而成。注意:1.变量名不能以数字开头;           2.变量名不能为关键字;           3.变量名尽量起有意义的,能够通过变量名知道代表的是什么。 二
2023-01-30

Python学习之旅(三十三)

网络通信是两台计算机上的两个进程之间的通信,而网络编程就是如何在程序中实现两台计算机的通信P协议负责把数据从一台计算机通过网络发送到另一台计算机TCP协议则是建立在IP协议之上的。TCP协议负责在两台计算机之间建立可靠连接,保证数据包按顺序
2023-01-30

Python学习之旅(三十七)

程序运行的时候,数据都是在内存中的。当程序终止的时候,通常都需要将数据保存到磁盘上,无论是保存到本地磁盘,还是通过网络保存到服务器上,最终都会将数据写入磁盘文件。而如何定义数据的存储格式就是一个大问题。为了便于程序保存和读取数据,而且,能直
2023-01-30

Python学习之旅(三十八)

二、MySQLMySQL是Web世界中使用最广泛的数据库服务器。SQLite的特点是轻量级、可嵌入,但不能承受高并发访问,适合桌面和移动应用。而MySQL是为服务器端设计的数据库,能承受高并发访问,同时占用的内存也远远大于SQLite。可以
2023-01-30

Python3学习(二十):python

最近需要写一个模块来合并日志文件,该模块的日志文件不限于常见的.txt格式的文件,也包括其他格式的文本文件。代码如下:import os import datetimedocList = os.listdir('/home/liao/xxx
2023-01-31

【Python之旅】第四篇(二):Pyt

在Python程序的执行过程中,难免会出现异常的情况,如果做的是跟用户交互的程序,当用户输入不可接受的内容时,在可预见的范围内,我们当然是希望可以给用户一些提示,而不是原来Python内置异常中的那些提示语句,毕竟那些语句只适合给程序员做调
2023-01-31

python的学习之旅

首先先介绍下本人,本人名叫杜邱,别名也叫故都的秋,网络工程专业毕业,现就职一家电子商务公司,已经三年了,起初从一个小小的网管做起,一台路由器,一台交换机,下面连着50几台电脑,三年过去了,慢慢的也在成长,装过监控,管过服务器,弄过网络,杀过
2023-01-31

我的python学习--第十二天(二)

Python异常处理  Python的异常处理能力是很强大的,可向用户准确反馈出错信息。在Python中,异常也是对象,可对它进行操作。所有异常都是基类Exception的成员,所有异常都从基类Exception继承,而且都在excepti
2023-01-31

学习python的第二十天(dateti

1.datetime模块(用于修改日期)import datetimeprint(datetime.datetime.now(),type(datetime.datetime.now()))2019-06-10 19:37:55.77688
2023-01-31

我的python学习--第十四天(一)

一、运维管理系统(基于Flask)回顾1、权限控制  通过session实现权限控制,session是一个全局字典,当用户登录时,可以获取到用户的用户名,通过查找数据库获取用户的权限保存进session中,在每次页面跳转时同过查询sessi
2023-01-31

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录