10 2020 档案
摘要:由于Python的GIL,多进程并非CPU密集型程序的better choice 多进程可以完全独立的进程环境中运行程序,可以充分的利用多核心 但进程本身隔离带来数据共享问题,而且线程比进程轻量级 multiprocessing Process类: import multiprocessing,da
阅读全文
摘要:Socket套接字 Python提供socket.py标准库 AF Address Family Server: 创建Socket对象 绑定IP地址和Port bind()方法IPv4地址必须是一个二元组('ipv4',Port) list报错 监听于bind()后的地址,listen()方法 获取
阅读全文
摘要:concurrent.futures 异步并行任务模块 提供两个池执行器 ThreadPoolExcutor 异步调用的线程池Executor ProcessPoolExecutor 异步调用的进程池Executor 首先需要定义一个池的执行器对象,Executor类子类的对象 method imp
阅读全文
摘要:#!/bin/bash echo $BASHPID for _ in `seq 100`;do echo start sleep 5 echo $BASH_SUBSHELL echo stop done & sleep 20 7267是脚本进程,其又开启了两个进程7268 7269,7268是for
阅读全文
摘要:rsync Options: -v, --verbose 详细模式输出 -q, --quiet 精简输出模式 -c, --checksum 打开校验开关,强制对文件传输进行校验 -a, --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于 -rlptgoD -r, --re
阅读全文
摘要:和Lock很像,信号量对象内部维护一个倒计算器,每次调用acquire()都会 -1 , 当acquire()时,计算器为0就会阻塞请求线程,直到其它线程对信号量 release()后,计数器 +1,恢复阻塞线程 name implication Semaphore(value=1) 构造方法,va
阅读全文
摘要:name meaning Barrier(parties,action=None,timeout=None) 构建Barrier对象,指定参与方数目,timeout是wait方法未指定超时的默认值 n_waiting 当前在屏障中等待的线程数 parties 各方数,需要多少个等待 wait(tim
阅读全文
摘要:from threading import Event,Thread import logging,time FORMAT='%(asctime)s %(threadName)s %(thread)d %(message)s' logging.basicConfig(format=FORMAT,le
阅读全文
摘要:shell中if while等后必须接命令,利用命令的exit code作为判断,而其他高级语言是利用return值作为判断对于非命令变量,可以利用test or [ ] or [[ ]] 进行判断如果确实需要用命令或函数的返回值作为判断,可以如下 function p(){ echo $$ exi
阅读全文
摘要:#下载fpm yum install ruby ruby-dev #切换gem源为国内源 gem sources --add https://gems.ruby-china.com/ --remove https://rubygems.org/ #下载fpm gem install -y fpm #
阅读全文
摘要:import logging logging.basicConfig(format='%(name)s %(asctime)s %(message)s',level=logging.INFO) root=logging.getLogger("") root.setLevel(logging.ERRO
阅读全文
摘要:启停示例: startInstance.py #!/bin/env python3 # StartInstance #coding=utf-8 from aliyunsdkcore.client import AcsClient from aliyunsdkcore.acs_exception.ex
阅读全文
摘要:at atd 等所有命令均由 at 包提供 默认只有/etc/at.deny ,此为黑名单 /etc/at.allow 为白名单,优先级高于 /etc/at.deny 当/etc/at.allow 和 /etc/at.deny 都不存在时,只有 root才能使用 at ,rpm包默认提供了空/etc
阅读全文
摘要:shell中true & false是两个命令,其返回值为NULL,true 的 exit code为0,false 的exit code 为 1 #!/bin/env sh if [[ `$1` ]];then echo true else echo false fi 把false作为命令执行,其
阅读全文
摘要:IIS: Internet Information Server 服务显示名称为: World Wide Web Publishing Service 服务名称为: W3SVC IIS通过Windows服务主进程svchost.exe启动,启动后的进程为w3wp 我们可以用w3svc通过命令行,来控
阅读全文
摘要:背景:windows下安装python相关的软件包的时候使用pip安装scrapy等软件包,依赖twisted等C++编写的程序时候: error: Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visual C++ Bu
阅读全文
摘要:IPSec是虚拟私密网络的一种实现,在server & client间建立加密隧道传输数据,分两个阶段 Phrase1交换密钥建立隧道,使用IKE协议(Internet Key Exchange)IKE分两个版本(IKE1/IKE2)IKE1有两种模式,主力模式(main mode),积极模式(野蛮
阅读全文
摘要:Openswan/Strongswan对接华为云VPN配置指南 作者 : 华为云VPN服务团队 文档中底色绿色代表命令,底色灰色代码命令显示信息,底色黄色为配置关注点 一、拓扑说明 本场景连接拓扑如下图所示,云端两个VPC。其中一个VPC购买VPN网关,另一个VPC购买ECS、 EIP并安装IPse
阅读全文
摘要:简介 本文介绍IPSecVPN的搭建过程,并通过公网将分属于美团云上海与北京两个机房内的vpc子网打通。由于美团云经典网络在网络控制器上对ip_filter 做了限制,打通前需要确保两边网络都处于VPC下,且子网网段无交集。当前部署环境为CentOS 6.5。 一、网络模型 计划实现的效果是,从左侧
阅读全文
摘要:ipsec.secrets配置文件可写成 : PSK "psk" 会读取ipsec.conf 的 left 和 right 配置 type=start 可自动触发协商 strongswan up dualistic type=route | add 需要手动触发协商 strongswan down
阅读全文
摘要:CentOS 7 源码安装 PHP 7.4 正式版教程 1、准备编译环境 yum -y install epel-release yum-utils yum config-manager --set-enabled PowerTools yum -y install gcc gcc-c++ make
阅读全文
摘要:关于内核版本的定义: 版本性质:主分支ml(mainline),稳定版(stable),长期维护版lt(longterm) 版本命名格式为 “A.B.C”: 数字 A 是内核版本号:版本号只有在代码和内核的概念有重大改变的时候才会改变,历史上有两次变化:数字 B 是内核主版本号:主版本号根据传统的奇
阅读全文
摘要:新安装的nginx可以正常启动,但是查看状态,有个报错 nginx的启动一定的时间,systemd在/run/nginx.pid还未创建时,就读取,造成如此错误 解决办法: 修改nginx的Unit文件 修改前: [Unit] Description=The nginx HTTP and rever
阅读全文
摘要:一. 二、hosts.allow和hosts.deny支持哪些服务 2.1 hosts.allow和hosts.deny支持哪些服务 hosts.allow和hosts.deny规则的执行者为TCP wrappers,对应守护进程为tcpd;而tcpd执行依赖于程序使用了libwrap库。 也就是说
阅读全文
摘要:https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html default-storage-engin=INNODB 设定默认存储引擎 general-log=0 关闭general log skip-networking
阅读全文
摘要:本文提供了如何使用growpart和resize2fs工具完成Linux系统盘扩展分区和文件系统的操作指导。 前提条件 在扩展系统盘分区和文件系统前,请提前完成以下工作。 已创建快照备份数据。 为防止操作失误导致数据丢失,建议您操作前使用快照备份数据。具体操作请参见创建普通快照。 已在控制台上扩容云
阅读全文
摘要:扩容云盘(ResizeDisk)只是扩大云盘的存储容量,不会扩容ECS实例的文件系统,您需要按照本文步骤扩容文件系统,实现ECS实例存储空间的扩展。 前提条件 已创建快照备份数据。 为防止操作失误导致数据丢失,建议您操作前使用快照备份数据。具体操作请参见创建普通快照。 已在控制台上扩容云盘。 若尚未
阅读全文
摘要:parted: mkpart PART-TYPE [FS-TYPE] START END PART-TYPE是指定PARTLABEL的,一般指定为primary,blkid中会显示当分区为gpt时,可以任意指定分区名称,msdos有限制 一般指定为primary 在mkpart操作之前必须有明确的P
阅读全文
摘要:删除从左至右删除第一个匹配的字符串 ${var/str} 删除全部匹配的str ${var//str} 替换从左至右替换第一个匹配的str1 ${var/str1/str2} 替换全部str1为str2 ${var//str1/str2}
阅读全文
摘要:网站已接入Web应用防火墙进行防护后,您可以设置源站服务器的访问控制策略,只放行Web应用防火墙回源IP段的入方向流量,防止黑客获取您的源站IP后绕过Web应用防火墙直接攻击源站。本文介绍了源站服务器部署在云服务器ECS、负载均衡SLB时,如何设置对应的安全组规则和白名单策略。 前提条件 源站服务器
阅读全文
摘要:一、需求背景介绍: 客户业务在往腾讯云迁移的过程中,因为两边的数据需要同步,所以需要建立站点到站点的IPsec V**连接,由于某些公司没有V**设备或者其他云不支持V** Gateway产品的时候,就需要我们自己搭建IPsec V**服务。 本文以strongSwan为例介绍如何在本地站点中加载I
阅读全文
摘要:command > output.txt The standard output stream will be redirected to the file only, it will not be visible in the terminal. If the file already exist
阅读全文
摘要:一、拓扑说明 本场景连接拓扑如下图所示,云端两个VPC。其中一个VPC购买VPN网关,另一个VPC购买ECS、 EIP并安装IPsec软件客户端,两个VPC间建立VPN连接。 VPC1的VPN网关IP:11.11.11.11,本地子网192.168.200.0/24; VPC2的EIP为22.22.
阅读全文
摘要:规则: 找到from字句中指定的模块,加载并初始化它(不是导入) import字句后的名称: 先查from字句导入的模块是否具有该名称的属性 如果不是,则尝试导入该名称的子模块 还没找到,抛出ImportError异常 这个名称保存到本地名词空间中,如果有as字句,使用as字句后的名称 from p
阅读全文
摘要:启动openvpn client端后,client端的初始化 ROUTE_GATEWAY 192.168.100.1/255.255.255.0 IFACE=ens192 HWADDR=00:50:56:9b:2e:ba这是机器原本的gateway信息 TUN/TAP device tun0 ope
阅读全文
摘要:系统盘扩容后启动报错启动,搜索后说是把 日志配置文件log4j2.properties 中的配置变为 logger.deprecation.level = error 然而,没卵用 仔细分析后是日志路径/var/log/elasticsearch中这个目录没了 手动建一个就好 因为/var/log的
阅读全文
摘要:input(redis) => output(elasticsearch) input { redis { host => '127.0.0.1' data_type => 'list' key => 'logstash:redis' threads => 10 } } output { elast
阅读全文
摘要:#!/bin/env sh while [ true ];do count=$(ps -ef|grep $1|grep -v grep|grep -v $1) if [[ -z $count ]];then echo failed sh $1 else echo success fi sleep 2
阅读全文
摘要:snapshot: snapshot api是Elasticsearch用于对数据进行备份和恢复的一组api接口,可以通过snapshot api进行跨集群的数据迁移,原理就是从源ES集群创建数据快照,然后在目标ES集群中进行恢复。 Snapshot and restore 模块允许创建单个索引或者
阅读全文
摘要:LV扩容 一、 LVM概述 在 Linux 系统中,我们经常使用 LVM (逻辑卷管理)的方式去管理和使用磁盘, LVM 可以动态扩容,给我们的使用带来了很多的便捷性 LVM结构图如下: image.png 物理卷(Physical Volume,PV) 指磁盘分区或从逻辑上与磁盘分区具有同样功能的
阅读全文
摘要:shell中 ! 叫做事件提示符,Event Designator,可以方便的引用历史命令,即history中记录的命令 !n 引用第n条命令 !-n 引导倒数第n条命令, !-1 引用倒数第一条命令 !! 同 !-1 !string 引用最近以string开始的命令 !$ 传递最后执行的命令参数
阅读全文
摘要:return 返回的是状态码, return不返回函数返回值 可以在前面用 echo 返回函数返回值,return 返回指定函数退出状态码 echo 返回的是函数返回值,如果没有使用return,则函数退出状态码是函数最后一条命令的退出状态码 return后面的语句将不再执行 #!/bin/bash
阅读全文
摘要:自定义keyfile: 路径必须位于/etc/NetworkManager/system-connections/*.nmconnection This file must be owned by root and be readably only by root - otherwise Netwo
阅读全文
摘要:查看模块的内容dir(functools)
阅读全文
摘要:错误Error: 逻辑错误: 算法错误, - => + 笔误: 变量名错误,语法错误 函数或类使用错误 错误可以避免 异常Exception: 本身就是意外情况 前提时没有出现上面的错误,即程序写的没有问题,但是某些情况下,会出现一些意外,导致程序无法正常执行下去 open函数操作一个文件,文件不存
阅读全文
摘要:class Property: def __init__(self,fget=None,fset=None,fdel=None): self.fget=fget self.fset=fset self.fdel=fdel def __repr__(self): return 'self: {} fg
阅读全文
摘要:借助list class SimplexNode: def __init__(self,item,prev=None,post=None): self.item=item self.prev=None self.post=None def __repr__(self): # return 'item
阅读全文
摘要:实现StaticMethod,完成staticmethod装饰器功能 实现ClassMethod,完成classmethod装饰器功能 class StaticMethod: def __init__(self,fn): print('StaticMethod Init') self.fn=fn d
阅读全文
摘要:运行时,区别于编译时,指的是程序被加载到内存中执行的时候 反射,reflection,指的是运行时获取类型定义的信息 一个对象能够在运行时,像找镜子一样,反射处其类型信息 在Python中,能够通过一个对象,找出其type,class,attribute,method的能力,称为反射或自省 具有反射
阅读全文
摘要:文件I/O操作可以对文件对象使用上下文管理,使用with as语法 with open('file') as f: pass 上下文管理对象 当一个对象同时实现了__enter__()和__exit__()方法,就属于上下文管理对象 __enter__进入与此对象相关的上下文,如果存在该方法,wit
阅读全文
摘要:类思想实现 class Fabonacci: def __init__(self): self.b=[1,1] # 缓存计算结果 def __call__(self,p): if p <= len(self.b): # 判断是否已经计算过 return self.b[p-1] for v in ra
阅读全文
摘要:def vix(): print(vix.__module__,vix.__name__) vix() == vix.__call__() 对象vix加上(),就是调用对象的__call__()方法 定义一个类,实例化得到实例,将实例像函数一样调用 def viz(*args): print(arg
阅读全文
摘要:__len__内建函数len(),返回对象的长度(>=0),把对象当作容器类型看,如同list或dict,bool()函数调用的时候,如果没有__bool__()方法,则会看__len__()方法是否存在,存在返回非0为真 __iter__ 迭代容器时调用,返回一个新的迭代器对象 __contain
阅读全文
摘要:operator模块提供一下特殊方法,可以将类的实例使用下面的操作符来操作 运算符 特殊方法 含义 <,<=,==,>,>=,!= __lt__,__le__,__eq__,__gt__,__ge__,__ne__ 比较运算符 +,-,*,/,%,//,**,divmod __add__,__sub
阅读全文
摘要:__bool__ 内建函数bool(),或者对象放在逻辑表达式的位置,调用这个函数返回布尔值,没有定义__bool__(),就找__len__()返回长度,非0为真,如果__len__()也没有定义,所有实例都返回真 class B:pass print(bool(B())) class C: de
阅读全文
摘要:__hash__: 内建函数hash()调用的返回值,返回一个整数,如果定义这个方法该类的实例就可hash class M: b=899 def __init__(self): self.hy=44 pass def __hash__(self): return 89 # __hash__=None
阅读全文
摘要:__name__ 类,函数,方法的名字 __module__ 类,函数,方法所在的模块名 __class__ 类,对象,函数所属的类所有的函数和方法均属于<class 'function'> def bnm():pass class P: def uo(self):pass print(bnm.__
阅读全文
摘要:p='''bottle\r\nbag\r\nbig\napple''' import re regex=re.compile(r'\bb(?P<middle>\w)(?P<tail>g)') mat=regex.finditer(p) print(mat) for m in mat: print(m
阅读全文
摘要:class SimplexNode: def __init__(self,value,post=None,prev=None): self.value=value self.post=post self.prev=prev def __repr__(self): # return 'Node: {}
阅读全文
摘要:class Document: def __init__(self,content): self.t=content def print(self): print(self.t) class Pdf(Document):pass class PrintableMixin: def print(sel
阅读全文
摘要:class Animal: __ORE= 'Animal ore' @classmethod def getore(cls): # 由于是私有属性,所以此处的cls.__ORE已经被解释器替换成cls._Animal_ORE print('class: {}\tclassORE: {}'.forma
阅读全文
摘要:import math class Shape: @property def area(self): raise NotImplementedError('Base class not implemented') class Triangle(Shape): def __init__(self, a
阅读全文
摘要:class Oar: def __init__(self,oar): self.o=oar def print(self): print(self.o) # print 不会到class Oar下面找,除非引用self.print def decorator(cls): def _print(sel
阅读全文
摘要:def printable(): def wrapper(cls): cls.print=lambda self:print(self.content) return cls return wrapper @printable() # 先调用生成wrapper Word=wrapper(Word)
阅读全文
摘要:OCP原则:多继承,少修改 继承的用途:增强基类,实现多态 多态 在面向对象中,父类和子类通过继承联系在一起,如果可以通过一套方法,就可以实现不同表现,就是多态 一个类继承自多个类就是多继承,他将具有多个类的特征 class Document: def __init__(self,content):
阅读全文
摘要:class A: def __init__(self,a): self.a=a class B(A): def __init__(self,b,c): self.b=b self.c=c def printv(self): print(self.b) print(self.a) f=B(200,30
阅读全文
摘要:class Animal: x=123 def __init__(self,name): self._name=name self.__age=10 @property def name(self): return self._name def shout(self): print('Animal
阅读全文
摘要:class Car: def __init__(self,brand,speed,color,price): self.b=brand self.s=speed self.c=color self.p=price def __repr__(self): return '''\ brand:%s sp
阅读全文
摘要:import random class RandomGenerator: def __init__(self,count=10,minimum=1,maximum=100): self.count=count self.min=minimum self.max=maximum self.g=self
阅读全文
摘要:在其他面向对象的高级语言中,都有重载的概念 重载: 同一个方法名,但是参数的数量和类型不一样,就是同一个方法的重载 Python没有重载 Python不需要重载 Python中,方法(函数)定义中,形参非常灵活,不需要指定类型(就是指定了,也只是一个说明,而非约束),参数个数也不固定(可变参数),一
阅读全文
摘要:类中可以定义__del__方法,称为析构方法 作用: 销毁类的实例时调用,以释放占用的资源 由于python实现了垃圾回收机制,这个方法不确定何时执行,有必要时,使用del语句手动删除实例 class Person: def __init__(self,name,age=20): self.name
阅读全文
摘要:property装饰器: 后面跟的函数名就是以后的属性,它即是getter,这个必须有,只读属性 setter装饰器: 于属性名同名,接收两个参数,第一个是self,第二个是将要赋值的值,将属性变为可写 deleter装饰器: 可以控制属性是否删除 property装饰器必须在前,setter,de
阅读全文
摘要:lambda <args>:<expression> <expression>必须是单个表达式,不能是多个由;分割的表达式 使用exec函数 b=1 p=lambda v:exec("global b;b+=1;print(v+b)") print(p(1)) print(p(2)) 此种方式返回值
阅读全文
摘要:relevance.py from relevance1 import Mim from relevance2 import get p=Mim(22,33,44) print(p.get()) def monkeypath4Mim(): Mim.get=get if __name__ == '__
阅读全文
摘要:from pathlib import Path def openfile(path:str)->None: yield path def cix(path:str): p=Path(path) if p.exists(): if p.is_file(): yield from openfile(s
阅读全文
摘要:from pathlib import Path import argparse,sys,datetime,stat,platform def showdir(path:str='.',all=False,detail=False,human=False,reverse=False): def co
阅读全文
摘要:class Mse: @classmethod def __new__(cls,*args,**kwargs): pass @classmethod def class_method(cls): print('class={0.__name__} ({0})'.format(cls)) cls.HE
阅读全文
摘要:import re,datetime,threading,queue from pathlib import Path from user_agents import parse from collections import defaultdict log='''10.1.1.95 - e800
阅读全文
摘要:import datetime,random,time def source(): while True: yield {'value':random.randint(1,100),'datetime':datetime.datetime.now(datetime.timezone(datetime
阅读全文