
python高级语法
大帅不是我
你的坚持,终将美好。
展开
-
Python处理僵尸进程
os.waitpid、僵尸进程、python、signal原创 2022-01-28 00:02:47 · 5527 阅读 · 0 评论 -
python lru_cache缓存
@functools.lru_cache(maxsize=128,typed=False)@lru_cache装饰器可以提供缓存的功能,缓存maxsize组传入参数,在下次以相同参数调用时直接返回上一次的结果。用以节约高开销或I/O函数的调用时间。举个列子:普通计算斐波那契数列的递归代码import timeitcnt = 0def fib(n): if n == 1: global cnt cnt += 1 if n < ...原创 2021-08-23 23:08:19 · 1136 阅读 · 0 评论 -
Python装饰器和闭包
1. 闭包闭包的构成条件:存在函数嵌套(函数内部还定义一个函数) 内部函数使用了外部函数的变量(还包括外部函数的参数) 外部函数返回了内部函数闭包的作用:闭包可以保存外部函数内的变量,不会随着外部函数调用完而销毁。可以提高代码的可重用性。简单闭包的示例代码:# 定义一个外部函数def func_out(num1): # 定义一个内部函数 def func_inner(num2): # 内部函数使用了外部函数的变量(num1) resu原创 2021-06-01 22:45:29 · 205 阅读 · 0 评论 -
Python编程小技巧
1. 逻辑判断的几种写法a, b = 1, 2if a > b: c = aelse: c = bprint(c) # 2c = a if a > b else bprint(c) # 2c = [b,a][a>b]print(c) # 2c=(a>b and a or b)print(c) # 2原创 2021-05-27 22:44:29 · 231 阅读 · 0 评论 -
python 特殊方法和特殊属性详解
python魔法方法的官方文档:官方地址原创 2021-05-19 22:41:15 · 525 阅读 · 0 评论 -
Python生成器send、next、yield from详细解读
生成器:生成器是一类特殊的迭代器,就是需要在生成的时候才产生结果yield,而不是立即返回结果return。这样可以同时节省CPU和内存。生成器自动实现了迭代器的两个方法:__iter__() 和 __next__()有两种方法实现生成器:生成器函数。使用yield返回结果。yield语句一次返回一个结果,在每个结果中间挂起函数的状态,下次调用时从他离开的地方继续执行。 生成器表达式。类似列表表达式,用()来表示。1. 简单的生成器实例如下代码定义了MyGenerator函数,for循环原创 2021-05-09 23:58:03 · 519 阅读 · 0 评论 -
python协程greenlet和gevent的用法
greenlet是python中实现协程的一个模块。1. greenlet的简单使用from greenlet import greenletdef eat(name): print(name,'eat one') g2.switch(name) print(name,'eat two') g2.switch()def play(name): print(name, 'play one') g1.switch(name) pri原创 2021-05-09 17:40:53 · 329 阅读 · 0 评论 -
python协程异步 I/O----asyncio
协程本质上是单线程,协程的调度是在单个线程里执行的,切换的开销比较小,因此效率上略微比多线程高。有了协程,在执行IO耗时操作时,函数可以临时让出控制权,让CPU去执行其他函数。协程的应用场景:IO密集型。python3中使用协程的库:asyncio1. 协程的简单实例import asyncioimport timeasync def task(): print("task start") time.sleep(2) print("task end")原创 2021-05-09 16:26:03 · 264 阅读 · 0 评论 -
python-Paramiko类的封装
对paramiko功能模块的封装,实现远程执行命令,文件上传下载功能import paramikoconf = { '196.168.41.222': ('root', 'root'),}class SSHConnection(object): def __init__(self, host, port): self._host = host self._port = port self._username = conf[ho原创 2021-04-30 16:09:52 · 590 阅读 · 15 评论 -
Python远程执行命令模块-Paramiko
paramiko是一个SSHv2协议的python实现,提供客户端和服务器的功能。paramiko可以通过ssh协议执行远程主机的程序或脚本,获取输出结果和返回值,使用起来简介优雅。安装方式:pip3 install paramiko1. 基于用户名和密码的SSHClient方式登录编程步骤如下:(1)初始化一个SSHClient类的实例(2)调用connect方法连接远程主机(3)执行命令获取输出和返回值,关闭连接代码实现:import paramiko# 建立一个s原创 2021-04-29 22:15:34 · 2196 阅读 · 0 评论 -
Python 实例方法、类方法、静态方法的区别与作用
Python中至少有三种比较常见的方法类型,即实例方法,类方法、静态方法。它们是如何定义的呢?如何调用的呢?它们又有何区别和作用呢?且看下文。首先,这三种方法都定义在类中。下面我先简单说一下怎么定义和调用的。(PS:实例对象的权限最大。)实例方法 定义:第一个参数必须是实例对象,该参数名一般约定为 self,通过它来传递实例的属性和方法(也可以传类的属性和方法); 调用:只能由实例对象调用。类方法 定义:使用装饰器@classmethod。第一个参数必须是当前类对象...转载 2021-04-21 23:27:25 · 167 阅读 · 0 评论 -
python之yaml文件读取封装
yaml文件的简单读取参考:https://blog.youkuaiyun.com/hhs_1996/article/details/115828341以下是对yaml文件读取的类封装import yamlimport osclass YamlData: def __init__(self, file): if os.path.isfile(file): self.file = file else: raise F原创 2021-04-20 23:24:20 · 883 阅读 · 1 评论 -
python读取yaml文件
1.简介YAML 是 "YAML Ain't a Markup Language"(YAML 不是一种标记语言)的递归缩写。在开发的这种语言时,YAML 的意思其实是:"Yet Another Markup Language"(仍是一种标记语言)。YAML 的语法和其他高级语言类似,并且可以简单表达清单、散列表,标量等数据形态。它使用空白符号缩进和大量依赖外观的特色,特别适合用来表达或编辑数据结构、各种配置文件、倾印调试内容、文件大纲(例如:许多电子邮件标题格式和YAML非常接近)。YAML 的原创 2021-04-18 15:07:47 · 1957 阅读 · 0 评论 -
Python 字符串解析
字符串操作:输入字符串:123#@hello#a111输出:['123', '#@', 'hello', '#', 'a', '111']说明:安装数字,字符,字母进行提取import rechars = '123#@hello#a111'new = []while len(chars) > 0: if chars[0].isdigit(): res = re.match(r'\d+', chars).group() n = len(r原创 2021-03-10 20:02:41 · 408 阅读 · 0 评论 -
Python重试机制模块:tenacity
在日常的工作中,可能由于网络波动原因,导致请求失败,下载超时,又或者是IO阻塞,导致不能及时响应。这时候就需要对功能添加重试代码,这里介绍一个python的第三方库:tenacity。安装方法:pip3 install tenacity官方详细文档:https://pypi.org/project/retry/示例:1. 最简单的重试(无限重试)from tenacity import retry@retrydef test_retry(): print("重试无.原创 2021-03-09 17:53:53 · 990 阅读 · 2 评论 -
Python-基于thread和queue的线程池
代码里的注释很详细#!/usr/bin/env python# -*- coding:utf-8 -*-"""一个基于thread和queue的线程池,以任务为队列元素,动态创建线程,重复利用线程,通过close和terminate方法关闭线程池。"""import queueimport threadingimport contextlibimport time# 创建空对象,用于停止线程StopEvent = object()def callback(status,原创 2021-03-08 16:54:55 · 665 阅读 · 0 评论 -
Python多线程之threading、Lock、Semaphore、Condition、Event、queue、Pool
1.使用threading模块操作多线程有以下两种方法:方法一:创建threading.Thread类的实例,调用其start()方法示例:import timeimport threadingdef task_thread(counter): print( f'线程名称:{threading.current_thread().name} 参数:{counter} 开始时间:{time.strftime("%Y-%m-%d %H:%M:%S")}' )原创 2021-03-04 15:44:35 · 650 阅读 · 2 评论 -
Python多进程和多线程的使用场景
Python多进程适用的场景:计算密集型(CPU密集型)任务Python多线程适用的场景:IO密集型任务计算密集型任务一般指需要做大量的逻辑运算,比如上亿次的加减乘除,使用多核CPU可以并发提高计算性能。IO密集型任务一般指输入输出型,比如文件的读取,或者网络的请求,这类场景一般会遇到IO阻塞,使用多核CPU来执行并不会有太高的性能提升。下面使用一台64核的虚拟机来执行任务,通过示例代码来区别它们,示例1:执行计算密集型任务,进行1亿次运算使用多进程from multiproc原创 2021-03-03 16:41:02 · 1625 阅读 · 3 评论 -
Python多进程之Process、Pool、Lock、Queue、Event、Semaphore、Pipe
1. Python创建进程类Processpython的multiprocessing模块提供了一个创建进程的类Precess,其创建有以下两种方法:创建Process类的实例,并指向目标函数和传递参数 自定义一个类并继承Process类,重写__init__()和run()方法Process类的构造函数如下:class multiprocessing.Process(group, target, name, kwargs) def __init__(self,原创 2021-03-01 20:24:54 · 1458 阅读 · 3 评论 -
Python多进程之数据交换Pipe
multiprocessing.Pipe()方法会返回一个管道(列表的形式)的两个端口,一个端口作为输入端,一个端口作为输出端,如进程A的输出可以作为进程B的输入,进程B的输出可以作为进程A的输入,默认是全双工模式。Pipe()方法返回的对象具有发送消息send()方法和接收消息recv()方法。调用接收recv()方法时,如果管道中没用消息会一直阻塞,如果管道关闭,则会抛出EOFError异常。示例:import multiprocessingimport timedef task1原创 2021-03-01 17:32:26 · 1267 阅读 · 1 评论 -
Python多进程之进程池Pool
进程池Pool可以提供指定数量的进程给用户使用,当有新的请求进程时,若Pool池没有满,就会创建一个新的进程用于执行该请求,如果Pool池中的进程数量已经达到最大值,则请求会等待,直到池中有进程结束才会创建新的进程。示例:# coding: utf-8import multiprocessingimport timedef task(name): print(f"{time.strftime('%H:%M:%S')}: {name} 开始执行") time.sleep(3原创 2021-02-27 19:45:02 · 490 阅读 · 0 评论 -
Python多进程队列Queue
Queue是python多进程的安全队列,可以使用Queue实现多进程之间的数据传递。示例:from multiprocessing import Process, Queueimport timedef ProducerA(q): count = 1 while True: q.put(f"冷饮 {count}") print(f"{time.strftime('%H:%M:%S')} A 放入:[冷饮 {count}]")原创 2021-02-27 19:25:05 · 5567 阅读 · 0 评论 -
Python多进程同步机制Event
Event用来实现多进程之间的同步通信示例:import multiprocessingimport timedef wait_for_event(e): e.wait() time.sleep(1) # 唤醒后清除Event状态,为后续继续等待 e.clear() print(f"{time.strftime('%H:%M:%S')} 进程 A: 我们是兄弟,我等你...") e.wait() print(f"{time.strft原创 2021-02-25 20:32:22 · 694 阅读 · 0 评论 -
Python多进程同步机制之Lock锁
多进程的目的是并发执行程序,提高程序执行效率,但有时候我们想要在某一时间,或者满足某一条件时,只有一个进程在执行,就需要使用Lock锁机制。示例:import multiprocessingimport timedef task1(lock): with lock: # with上下文语句使用锁,会自动释放锁 n = 5 while n > 1: print(f"{time.strftime('%H:%M:%S')}原创 2021-02-25 20:21:02 · 1525 阅读 · 0 评论 -
Python多进程并发控制之Semaphore
Semaphore是用来控制对共享资源的访问量,可以控制同一时刻进程的并发数量。示例:import multiprocessingimport timedef worker(s, i): s.acquire() # 获得锁 print(time.strftime('%H:%M:%S'), multiprocessing.current_process().name + " 获得锁运行"); time.sleep(i) print(time.strftime原创 2021-02-25 20:10:16 · 745 阅读 · 0 评论 -
Python创建进程类Process
1. Python创建进程类Processpython的multiprocessing模块提供了一个创建进程的类Precess,其创建有以下两种方法:创建Process类的实例,并指向目标函数和传递参数 自定义一个类并继承Process类,重写__init__()和run()方法Process类的构造函数如下:class multiprocessing.Process(group, target, name, kwargs) def __init__(self,原创 2021-02-24 17:37:45 · 1114 阅读 · 0 评论 -
python浅拷贝和深拷贝和区别
先说结论:浅拷贝和深拷贝都会开辟新的内存空间去存储拷贝后的对象,区别在于被拷贝的对象中是否包含可变类型的子对象。1.Python的浅拷贝import copyobj1 = ["a", 111, ["c", "php", "python"]]obj2 = copy.copy(obj1) # 浅拷贝print(obj1)print(f"id of obj1 is: {id(obj1)}")print([id(i) for i in obj1])print("-"*10)print(o原创 2021-02-23 15:39:05 · 1055 阅读 · 0 评论