
python
文章平均质量分 73
py
清风序来
热爱编程的同学一枚,没有什么是中间层解决不了的,如果有那就再来一层
展开
-
Python中的并发编程
场景1:一个网络爬虫,按顺序爬取花了一小时,采用并发下载减少到20分钟场景2:一个App应用,优化前每次打开页面需要3秒,采用异步并发提升到每次200ms引入并发就是为了提升程序运行速度CPU密集型:也叫计算密集型,是指I/O在很短时间内就可以完成,CPU需要大量的计算和处理,特点是CPU占用率相当高,例如:解压缩/加密解密/正则表达式搜索IO密集型:系统运作过程中大部分的状况是CPU在等待I/O(硬盘/内存)的读/写操作,CPU占用率很低.例如:文件处理程序,网络爬虫程序,读写数据库程序。原创 2025-05-22 22:02:14 · 910 阅读 · 0 评论 -
python装饰器详解高阶
说到装饰器,我们要知道在python中所有的都是对象object,包括我们的函数也是object,函数既然是对象,那么python中的函数的传参可以是一个函数,函数的返回值也是一个函数。装饰器就是把函数作为参数,返回值来实现的一种功能。原创 2025-05-21 18:16:03 · 394 阅读 · 0 评论 -
python中的引用,浅拷贝,深拷贝
浅拷贝则是外层是新的对象,但是内层id还是一样的,只是外层拷贝,内层的数据还是指向同一个人对象。从中可以看出引用,是同一个对象,外层id和内部数据id都是一样的。深拷贝则是,外层数据,内层数据都是全新生成的对象。浅拷贝:是重新生成一个对象,但是只是一层拷贝。深拷贝:生成一个新的对象,递归拷贝里面的数据。引用:是同一个对象。原创 2025-05-20 12:01:14 · 222 阅读 · 0 评论 -
python中的迭代器
通过__iter__()方法,迭代器返回它自己,这使得迭代器对象也可以被用在支持迭代的上下文中,如for循环中。迭代器是一个可以记住遍历的位置的对象。迭代器的核心特性是它们是惰性的,只有在你请求下一个值时,才会计算和提供值,而不是一开始就计算所有的值。状态不变性:迭代器是有状态的,这意味着一旦迭代器的状态改变,比如你用next()取出下一个元素,它的内部计数器将改变,无法返回到之前的状态。不直观的长度计算:与列表或元组不同,你不能直接获取迭代器的长度,因为迭代器是惰性的,它们的元素是按请求生成的。原创 2025-05-12 09:07:41 · 554 阅读 · 0 评论 -
python Socket编程
在 Python 中使用客户端/服务端 Socket 可以用于在网络上建立通信连接,实现数据的传输和交换。客户端通过 Socket 连接向服务端发送请求,服务端接收并处理这些请求,然后返回响应给客户端。客户端/服务端 Socket 在网络编程中被广泛应用,适用面相当广泛。原创 2025-04-07 09:35:42 · 375 阅读 · 0 评论 -
python的内存管理
python的内存管理主要是引用计数和垃圾回收器来进行内存管理。原创 2025-03-29 21:19:30 · 265 阅读 · 0 评论 -
python之GIL锁详解
多线程:只需要开1 个进程,这个进程开启 4 个线程,开启线程所消耗的资源很少,但是由于最终执行是只有一个 CPU 可以工作,所以最终消耗 40s 多的时间。3、在没有GIL锁的情况下,有可能多线程在执行一个代码的同时,垃圾回收机制对所执行代码的变量直接进行回收,其他的线程再使用该变量时会导致运行错误。由于GIL锁的存在,即使是多个线程处理任务,但是最终只有一个线程在工作,那么是不是多线程真的一点用处都没有了呢?2个线程都会去操作该数据,由于多线程对同一个资源的竞争,实际上引用计数为3,原创 2025-03-29 21:15:31 · 322 阅读 · 0 评论 -
python之多线程,多进程理解
1. 多线程(Multithreading)线程是进程中的一个执行单元。一个进程可以包含多个线程,它们共享同一个内存空间,共同完成任务。在 Python 中,多线程通常用于 I/O 密集型任务(例如网络请求、文件读写等),因为这些任务往往会因为 I/O 操作而被阻塞。通过多线程,我们可以让程序在等待 I/O 操作时继续处理其他任务,从而提升程序的整体响应速度。原创 2025-03-29 16:02:40 · 1424 阅读 · 0 评论 -
python之协程
Tasks用于并发调度协程,通过asyncio.create_task(协程对象)的方式创建Task对象,这样可以让协程加入事件循环中等待被调度执行。事件循环就是把你创建好的函数,加入到任务列表,事件循环负责监听任务列表,当执行这个函数遇到费时操作时,事件循环就会控制跳到其他可执行的任务,当没有可执行的任务就会等待当前任务执行完毕,只有全部任务都执行完毕,才会退出循环。2,包装协程为任务(task1 = asyncio.create_task( func() ))检查协程-->让出控制-->等待协程。原创 2025-03-29 15:33:16 · 840 阅读 · 0 评论 -
为什么使用Flask + uWSGI + Nginx 部署服务?
其次,需要支持应用相关的规范,例如类库、安全方面的特性。但是理论上web server与应用程序之间是无法通信的,他们之间也需要有一个桥梁,这个桥梁就是uWSGI,uWSGI通过WSGI这个协议,将web server的请求转换成应用程序可以理解的request,与应用程序进行动态数据交互,将请求到的数据转换成web server可以理解的形式,由 web server将数据最终返回给请求的客户端。(1)既然客户端可以请求服务端的数据,那么客户端与服务端肯定是可以通信的,通信是由谁来完成的呢?原创 2025-03-28 12:52:15 · 565 阅读 · 0 评论 -
Flask项目部署:Flask + uWSGI + Nginx
pidfile=uwsgi.pid #进程号存储文件,若不存在则会自动创建,pid里面只记录一个进程号,若存在多个进程processes,则使用uwsgi命令通过uwsgi.pid文件停止、重启uwsgi服务不全。master=true #启动主进程,来管理其他进程,其它的uwsgi进程都是这个master进程的子进程,如果kill这个master进程,相当于重启所有的uwsgi进程。daemonize=uwsgi.log #使进程在后台运行,并将日志打到指定的日志文件,文件若不存在则会自动创建。原创 2025-03-28 12:47:34 · 933 阅读 · 0 评论 -
Flask学习<3>:项目初始配置
DEBUG模式设置默认情况下flask不会开启DEBUG模式,开启DEBUG模式后,flask会在每次保存代码的时候自动的重新载入代码,并且如果代码有错误,会在终端进行提示。开启DEBUG模式有三种方式#1,直接在应用对象设置app.debug = Trueapp.run()#2,在执行run的时候,传递参数app.run(debug=True)#3,在config属性...原创 2020-01-07 16:58:22 · 112 阅读 · 0 评论 -
Flask学习<2>:Flask简介
Flask简介:flask是一款非常流行的Python Web框架,2010年,作者是Armin Ronacher。flask自2010年发布第一个版本以来,大受欢迎,深得开发者的喜爱,并且在多个公司已经得到了应用,flask能如此流行的原因,可以分为以下几点:微框架、简洁、只做他需要做的,给开发者提供了很大的扩展性。 Flask和相应的插件写得很好,用起来很爽。 开发效率非常高,...原创 2020-01-03 14:35:44 · 255 阅读 · 0 评论 -
Flask学习<4>:URL与视图
URL与视图URL与函数的映射:之前的helloworld.py文件中,我们已经看到,一个URL要与执行函数进行映射,使用的是@app.route装饰器。@app.route装饰器中,可以指定URL的规则来进行更加详细的映射,比如现在要映射一个文章详情的URL,文章详情的URL是/index/id/,id有可能为1、2、3…,那么可以通过以下方式:@app.route('/index...原创 2020-01-07 17:06:05 · 161 阅读 · 0 评论 -
python pip 安装 (国内豆瓣镜像云),避免超时
python -m pip install tensorflow(如果你安装的是别的库,请输入别的库名) -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com原创 2020-02-17 19:46:45 · 1049 阅读 · 0 评论 -
Flask学习<5>:模板简介
模板简介:模板是一个web开发必备的模块。因为我们在渲染一个网页的时候,并不是只渲染一个纯文本字符串,而是需要渲染一个有富文本标签的页面。这时候我们就需要使用模板了。在Flask中,配套的模板是Jinja2!Flask渲染Jinja模板:要渲染一个模板,通过render_template方法即可:from flask import Flaskfrom flask import...原创 2020-02-25 10:49:48 · 172 阅读 · 0 评论