自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(35)
  • 资源 (1)
  • 收藏
  • 关注

原创 “Unknown database ‘sportors2‘问题的出现可能因为两个phpstudy 集成环境端口冲突

今天,在通过python连接数据库时,蹦出来一个问题“"Unknown database ‘sportors2’”提示我数据库不存在,这是为啥?经过反复确认代码没问题,我的数据库确实存在,我就懵了,然后向大amy老师请教时,才想起之前安装过一个phpstudy 今天又安装了一个最新版本的,这两者的端口都是3306 于是乎,就产生冲突了,此中原因还是大amy推荐的文章:https://blog.csdn.net/CSDNPM250/article/details/78151456里提到的内容。我按

2020-07-30 23:32:19 514

原创 mysql学习之 外键

定义:MySQL的外键约束(FOREIGN KEY)是表的一个特殊字段。对于两个具有关联关系的表而言,相关联字段中的主键所在表就是主表(父表),外键所在的表就是从表(子表)。要点:主键不能包含空值,但允许在外键中出现空值。也就是说,只要外键的每个非空值出现在指定的主键中,这个外键的内容就是正确的。具体操作:方式1:在创建表时定义外键:CREATE TABLE classes( id INT(4) NOT NULL PRIMARY KEY, NAME VARCHAR(36) -

2020-07-30 13:15:57 181

原创 mysql学习之where 和having

having和where同为设定条件的语句,其差别主要体现在与聚合语句的执行顺序上。但在查询过程中,聚合语句(sum,min,max,avg,count),比having子句先执行。聚合语句(sum,min,max,avg,count)要在where后再执行。换言之:Having是先分组在进行筛选,而where是先筛选再进行分组实例:...

2020-07-29 14:50:48 162

原创 shell脚本 获取命令执行反馈和在命令执行后一段时间杀死进程

今天,在完成一个任务时,遇到了一个问题:在启动脚本中配置一下以下内容:网关联网时会先对eth1 配置dhcp,如果配置dhcp成功了,则不再启动4G联网的程序,如果没成功则启动这个程序。还有个要求就是如果进行配置dhcp时如果该指令执行时间超过5s钟,则强制停止该指令。我想的是把配置dhcp时的一个参数取出来,通过:mm = $(udhcpc -i eth1 | grep “Lease” | awk ‘{print $3}’)而在达到时间限制结束一条指令的命令行是:udhcpc -i eth1 | g

2020-07-28 21:08:03 950

原创 mysql学习之子查询

在学习mysql中的子查询时,我一度有疑问,子查询和前文的and连接的条件不是一样的吗,一样都是要满足两个条件。但后来又回看了其中的条件,发现用法是不一样的。and连接的两个条件比如:查询表中女性而且年龄是21的人而子查询的使用条件是:查询表中女性而且年龄最大的人年龄是21的女性我们可以直接查询,通过and的方式,而查询年龄最大的女人呢,需要先把女性中的最大年龄查出来,再按照and的部分再执行一遍,比如查出来女性的最大年龄是21,那么我们就可以在查询中执行女性而且是26的人了。可以说子查询是先

2020-07-24 18:12:47 124

原创 python学习之tkinter 从一个错误说起

开宗明义,最近几天在学习tkinter,开发界面,中间参考过很多代码,在借鉴别人代码时,遇到了这样的错误:_tkinter.TclError: cannot use geometry manager pack inside . which already has slaves managed by grid这个错误的意思是:不能在内部使用pack进行布局,因为这个‘子控件’已经通过grid管理了这是一个比较常见的错误,如果混用grid和pack进行布局的话就会报错,在我的代码中出现的错误不是这个提示

2020-07-16 21:26:00 1956

原创 python程序在嵌入式linux系统运行。。

最近在写运行在嵌入式linux系统下的python程序。中间遇到很多坑,接下来我就一一说一下。从windows编写python脚本,然后将文件复制到嵌入式linux下,运行时报错:通过vi编辑器查看发现在每一行的后面都有一个^M,每一行都有我一看这要是把每一行的^M都去掉,那好几分钟过去了,很烦,而且这个事情在之前就遇到过几次,或者是shell脚本或者是txt文件,因为文件比较小,所以没在意,只是把符号去掉了事,结果遇见这么大的程序就该想想高科技的方式了。搜索时搜索到:https://www.jb

2020-07-14 17:58:36 1892

原创 在大量创建类时减少内存消耗 python实现

问题背景:在游戏开发中,有一个玩家类Player,每有一个在线玩家,在服务器内则有一个player的实例,当在线的人数很多时,将产生大量实例(百万级)解决方向:在实例化时,支持动态绑定的__dict_字段占用了很大的空间,如果要把dict去掉,加入__slots_ 声明实例中有哪些属性,即可关闭动态绑定而且悉知实例中的属性代码:class Player(object): def __init__(self, uid, name, status): self.uid = uid

2020-07-14 14:48:41 287

原创 生成器公式实现生成器与yield 实现生成器 python实现

生成器定义:python中边循环边计算的机制生成器来由:列表中所有的数据都在内存当中,如果有海量数据的话就会空耗内存,我们只会用到其中的几个数据,而却创建了一个很大的列表,我们只需要取出列表的几个值,此时就用到了生成器。简言之:又要得到海量数据,又要占用内存小,此时就用到了生成器,边循环边计算的机制是生成器。生成器表达式实现生成器方式:g = (i for i in range(10))print(g)print(type(g))print(next(g))print(next(g))执

2020-07-14 13:12:22 252 2

原创 python 面向对象 继承之 supper 函数

supper 最基本的使用方法:重写父类的构造方法 再调用父类的构造方法能够调用父类的构造方法,再调用父类的构造方法class A(object): def __init__(self): print('A')class B(A): def __init__(self): super().__init__() #super() 函数,不能不加括号! print('----B----')b = B()基本应用方式

2020-07-14 00:37:06 679

原创 列表的加法 a=a+b和 a+=b有什么区别

这两者貌似结果是一样的,但是实际的运行结果却大相径庭直接上代码:def add(a,b): #a = a + b a+=b #可变数据类型 在原有的数据地址上进行了拼接 return adef add2(a,b): a = a + b #此时的意义是将a b的内容进行拼接之后赋给了另一个叫做a的地址,两个变量的名称相同但是是一个不同的地址 #a+=b return aa = [1,2]b = [3,4]print('1. id(a)

2020-07-13 23:00:06 392

原创 垃圾回收 python实现

在Python程序运行的时候,会在内存中开辟一块空间,用于存放临时变量;当计算完成之后,就会将结果输出到永久性存储器中。如果数据量特别大,那内存空间管理不妥当的话就非常容易爆内存,程序可能直接终止。在Python中,一切皆对象。所以,每一个变量,实际上都是对象的一个指针。所以,当这个对象的引用计数(指针数)为0的时候,说明它也变成了垃圾,需要被放到回收箱中。当数据是局部变量时,在返回到函数调用处时,局部变量的引用会注销。这时,列表a所指代对象的引用数为0,Python便会执行垃圾回收,因此之前占用的内

2020-07-13 22:16:08 213

原创 python 计算占用内存空间

涉及模块:psutil(外部模块,需要pip安装的)import osimport psutildef show_info(start): pid = os.getpid() #模块名比较容易理解:获得当前进程的pid p = psutil.Process(pid) #根据pid找到进程,进而找到占用的内存值 info = p.memory_full_info() memory = info.uss/1024/1024 print(f'{start}

2020-07-13 20:54:06 3070

原创 进程方法 run和start的区别

start() 方法来启动进程,真正实现了多进程运行,这时无需等待 run 方法体代码执行完毕而直接继续执行下面的代码:调用 Process 类的 start() 方法来启动一个进程,这时此进程处于就绪(可运行)状态,并没有运行,一旦得到 cpu 时间片,就开始执行 run() 方法,这里方法 run() 称为进程体,当进程结束后,不可以重新启动。run() 方法只是类的一个普通方法,如果直接调用 run 方法,程序中依然只有主线程这一个线程,其程序执行路径还是只有一条,还是要顺序执行,还是要等待 run

2020-07-07 21:03:11 1337

原创 python 多进程之进程池的操作

当需要创建的子进程数量不多时,可以直接利用 multiprocessing 中的 Process 动态生成多个进程, 但是如果是上百甚至上千个目标,手动的去创建的进程的工作量巨大,此时就可以用到 multiprocessing 模块提供的 Pool 方法。也就是进程池。初始化 Pool 时,需要指定一个最大进程数,当有新的请求提交到Pool中时,如果池还没有满,那么就会创建一个新的进程用来执行该请求,但是如果进程池中的进程已经达到指定的最大值,那么该请求 就会等待,直到池中有进程结束,才会用之前的进程来执

2020-07-07 21:00:30 401

原创 进程池之间通信 python 实现

进程池间的通信:使用语句:multiprocessing.Manger().Queue()步骤:1.创建队列通信2.创建进程池3.给进程池添加任务,任务函数的参数为队列通信4.进程池关闭不再接受其他任务5.阻塞主线程import multiprocessingdef main(): #1.创建队列通信 queue = multiprocessing.Manager().Queue() #2.创建进程池 pool = multiprocessing.Pool

2020-07-07 20:59:52 372

原创 基于进程池实现文件拷贝

综合内容:基于进程池实现的拷贝内容;进程池间的通讯通过queue实现流程:运用多线程的部分只是在复制文件中进行的流程:输入文件夹名称,复制文件夹副本,读取文件夹内的文件名;创建进程池创建进程通讯队列通过进程池执行任务通过通讯队列获取拷贝文件个数计算和打印拷贝进度执行拷贝任务的函数:打开读取文件夹内的文件名,读取文件的文件内容,将内容写到新文件夹内的文件中代码:import multiprocessingimport osdef copy_file(queue,file_

2020-07-07 20:58:51 152

原创 多进程之间共享全局变量 python实现

线程之间是可以正常共享全局变量的,因为是共用同一片空间的,而进程之间所使用的是不同的内存空间所以线程之间可以共享全局变量,因为共用一片空间不同进程使用不同的空间,所以使用的资源本质上是不同的,所以一片空间上的变量变化了不会影响另一个空间的资源变化。通过代码来对比2者的区别:多线程实现:import threadingimport timenum = 100def demo1(): global num num += 100 print(f'----demo1---nu

2020-07-07 00:53:28 8149 1

原创 python模块os.getpid 和os.getppid在多进程中的应用

python函数os.getpid可以获取当前进程的PID,python函数os.getppid 可以获取当前进程的主进程的PPID上代码:import osfrom multiprocessing import Processimport timedef main(): p1 = Process(target=demo1) p2 = Process(target=demo2) p1.start() p2.start() print('主进程')

2020-07-06 19:10:09 5396

原创 python 实现多线程UDP聊天器

代码:import socketimport threadingdef udpSend(udp_s,ip,port): while True: sendCont = input('请输入要发送的内容:') udp_s.sendto(sendCont.encode(),(ip,port))def udpRecv(udp_s): while True: recvCont = udp_s.recvfrom(1024) pri

2020-07-06 19:09:24 2395

原创 进程和多进程实现多任务

进程定义进程是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。并且进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。进程概念• 进程是一个实体。每一个进程都有它自己的地址空间,一般情况下,包括文本区域(text region)、数据区域(data region)和堆栈(stack region)。• 进程是一个“执行中的程序”。• 进程是操作系统中最基本、重要的概念。进程与程序区别• 进程:正在执行的程序。动态的,暂

2020-07-06 10:36:16 230

原创 线程同步

任务介绍:实现:天猫精灵:小爱同学小爱同学:在天猫精灵:现在几点了?小爱同学:你猜猜现在几点了实现方式:一个类叫天猫精灵 一个类叫小爱同学 在两者里面分别加入说的话使用了上下文管理器from threading import Condition其中涉及到等待与唤醒两个方法等待和唤醒必须成对出现,通过等待和唤醒可以让两个线程进行通讯,可以让两个线程中的某些语句交替执行,实现了线程之间的通讯等待:self.cond.wait()唤醒:self.cond.notify()sel

2020-07-05 18:35:16 210

原创 python实现死锁和重入锁

在线程间共享多个资源的时候,如果两个线程分别占有一部分资源并且同时等待对方的资源,就会造成死锁。import threadingimport timeclass MyThread1(threading.Thread): def run(self): # 对mutexA上锁 mutexA.acquire() # mutexA上锁后,延时1秒,等待另外那个线程 把mutexB上锁 print(self.name+'----do1-

2020-07-05 17:45:41 278

原创 python 多线程 互斥锁和死锁

在上一节提到的资源抢占的问题,那么这个问题如何解决呢?互斥锁就可以解决这个问题:资源抢占的问题原因在于两个线程操作同一个资源,此时这个资源的内容就混乱了,对于两个线程都不能正常服务此时就可以考虑在一个线程工作的时候,将线程锁定,其他线程无法访问,这就是互斥锁当多个线程几乎同时修改某一个共享数据的时候,需要进行同步控制某个线程要更改共享数据时,先将其锁定,此时资源的状态为"锁定",其他线程不能改变,只到该线程释放资源,将资源的状态变成"非锁定",其他的线程才能再次锁定该资源。互斥锁保证了每次只有一个线

2020-07-05 16:10:36 217

原创 多继承 查看继承顺序的‘__mro__’魔法方法

class D(object): passclass B(D): passclass C(D): passclass A(B,C): passprint(A.__mro__)可以通过__mro__魔法方法查看多继承的顺序

2020-07-04 15:17:44 187

原创 python type和 isinstance is and ==

type:查看一个对象的类型isinstance:查看是不是某个类的实例isinstance()#考虑继承关系,我附庸的附庸也是我的附庸type()#不考虑继承关系的,我附庸的附庸不是我的附庸直接上代码:class Father(object): passclass Son(Father): passls = Son()print(isinstance(ls,Son))print(isinstance(ls,Father))#考虑到继承关系,ls也是Fathe.

2020-07-04 12:43:11 176

原创 python 实现 抽象基类 abc模块

抽象基类(abc模块)抽象基类介绍抽象基类(abstract base class,ABC):抽象基类就是类里定义了纯虚成员函数的类。纯虚函数只提供了接口,并没有具体实现。抽象基类不能被实例化(不能创建对象),通常是作为基类供子类继承,子类中重写虚函数,实现具体的接口。抽象基类就是定义各种方法而不做具体实现的类,任何继承自抽象基类的类必须实现这些方法,否则无法实例化。起名字时不要把模块名起为abc.py,因为abc基类的原因,那时候就会冲突应用场景:1.我们去检查某个类中是否有某种方法2.我们

2020-07-04 11:41:02 469

原创 多态和鸭子类型

鸭子类型:多态的概念是应用于Java和C#这一类强类型语言中,在使用一个变量时需要指定这个变量的类型;而Python崇尚"鸭子类型"动态语言调用实例方法时不检查类型,只要方法存在,参数正确,就可以调用。这就是动态语言的“鸭子类型”,它并不要求严格的继承体系,一个对象只要“看起来像鸭子,走起路来像鸭子”,那它就可以被看做是鸭子。我觉得可迭代对象这个变量的出现就非常重要比如extend这个方法,只要传入的是可迭代对象就可以使用这个方法a = [1,2]b = [3,4]c = (5,6)d =

2020-07-04 09:46:27 207

原创 多线程函数的传参

import threadingimport timenum = [1,2]def demo1(num): num.append(33) print(f'demo1 ----{num}')def demo2(num): print(f'demo2----{num}')def main(): #class threading.Thread(group=None, target=None, name=None, args=(), kwargs={}, *, da

2020-07-03 20:07:47 294

原创 python中 global的使用

global 是python的一个关键字,当在子函数内使用global时,可以将变量声明为全局变量当只需要对变量打印输出,不需要改变变量的内容时,不需要在函数内部声明变量为全局变量而当需要改变变量值时,则需要将变量声明为全局变量num = 1def demo1(): global num num += 1 print('num is',num)def demo2(): print('num=',num)demo1()demo2()...

2020-07-03 20:07:13 477

原创 线程中的全局变量与抢占资源

声明一个全局变量,当我们修改全局变量中的内容时,其他线程也会收到相应的修改。import threadingimport timenum = 100#global numdef demo1(): global num for i in range(100): num+=1 print(f'----demo1---{num}')def demo2(): global num #num+=1 print(f'----demo2--

2020-07-03 20:06:38 327

原创 守护线程与主线程等待子线程

在执行完主线程后以上程序继续执行子线程的后续内容,并不会立刻退出:import threadingimport timedef main(): t1 = threading.Thread(target=demo1) t2 = threading.Thread(target=demo2) t1.start() t2.start()def demo3(): for i in range(3): print('----demo3----')d

2020-07-03 20:06:08 272

原创 基于python实现多线程

首先科普一个问题:多任务:两个事情同时执行;一个人同时执行两个事情的方式主要通过手头处理一件事情,另一件事情自动跑着,边扫地边用洗衣机洗衣服。或者根本用的不是一个器官……边跑步边听音乐。计算机处理两件事情,因为计算机处理事情用的是CPU,要处理事情需要CPU在两件事情间穿插,不停的切换此时要谈到CPU的执行任务方式:并发和并行并发:两件事情同时触发,穿插执行,此时的情况是CPU个数(几个核)<任务个数,一个CPU穿插着执行几件事情并行:一个CPU只作一件事情本文通过python实现多线程,

2020-07-03 20:05:40 242

原创 通过继承 threading.Thread类实现多线程

实现方式:threading里有Thread类,在上一节中已经说明如何实现多线程,本文从另一个角度实现多线程直接上代码:import threadingimport time#创建A类,继承了threading.Thread类class A(threading.Thread): #重写run,而且只能是重写run def run(self): for i in range(3): print(f'-----{i}------')

2020-07-03 20:05:02 474

原创 python 弱引用

del 弱引用class A:... def __del__(self):... print('del')... a = A()b = aa = Noneb = Nonedel#以上为只是重写了del方法,当A释放的时候执行delimport weakrefclass B:... def __del__(self):... print('del')... b1 = B()b2 = weakref.ref(b1)b1 = Non

2020-07-03 20:03:28 128

mosquitto 相关包.rar

mosquitto1.5.5 arm 交叉编译出的安装包以及中间涉及的压缩文件openssl libuuid等 交叉编译链为arm-linux-gnueabihf-gcc IMX6UL 核心板

2021-10-23

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除