摘要: 在线程间共享多个资源的时候,如果两个线程分别占有一部分资源并且同时等待对方的资源,就会造成死锁,因为系统判断这部分资源都正在使用,所有这两个线程在无外力作用下将一直等待下去。 下面是一个死锁的例子: 阅读全文
posted @ 2018-06-01 14:06 Python哥 阅读(206) 评论(0) 推荐(0) 编辑
摘要: 同步锁作用: 在我当前包含(lock.acquire() 和 lock.release()之间 )的代码没有执行完成,不进行线程切换,必须等我执行完了,下一个线程才能继续执行(为什么要用同步锁,假如我们同时在操作一个数据的时候,比如数字100,10个线程同时操作他减1的时候,每个线程减10次,我们想 阅读全文
posted @ 2018-05-30 20:54 Python哥 阅读(410) 评论(0) 推荐(0) 编辑
摘要: 首先我画了一张图来表示GIL运行的方式: 结果: # 加法结果 499999500001 # 乘法结果: 结果太长省去了 # 上面2个线程总共运行时间: 27.660937547683716 Python 2中计算如上代码: 结果: # 加法结果 499999500001 # 乘法结果: 结果太长省 阅读全文
posted @ 2018-05-30 17:36 Python哥 阅读(432) 评论(0) 推荐(0) 编辑
摘要: GIL解决了Python中的什么问题? 为什么选取GIL作为解决方案? 对多线程Python程序的影响 为什么GIL还没有被删除? 为什么在Python 3 中GIL没有被移除? 如何处理Python中的GIL? 我们所说的Python全局解释锁(GIL)简单来说就是一个互斥体(或者说锁),这样的机 阅读全文
posted @ 2018-05-30 16:53 Python哥 阅读(5119) 评论(0) 推荐(2) 编辑
摘要: 我们常说的多任务或者单任务分为两种: IO密集型的任务 计算密集型的任务 IO密集型的任务或:有阻塞的状态,就是不一直会运行CPU(中间就一个等待状态,就告诉CPU 等待状态,这个就叫IO密集型),例如:sleep 状态等 这个上面代表了IO密集型. 计算密集型的任务: 反过来没有等待状态就是计算密 阅读全文
posted @ 2018-05-30 16:16 Python哥 阅读(5068) 评论(0) 推荐(2) 编辑
摘要: 为了提高CPU的使用效率、支持多任务操作,操作系统中引入了并发技术。 所谓并发是指系统中的多个程序或程序段能够同时执行,这里的同时执行并不是指某一个时刻多段程序在同进执行(除非有多个CPU),而是CPU能把时间分给不同的程序段。比如前面等待I/O的例子,若采用并发技术,当一个程序在等待I/O时,系统 阅读全文
posted @ 2018-05-30 14:50 Python哥 阅读(443) 评论(0) 推荐(0) 编辑
摘要: import threading #线程import timeclass Work(threading.Thread): def __init__(self,n): threading.Thread.__init__(self) #改写父类init方法 并把self 传递过去 self.n = n 阅读全文
posted @ 2018-05-30 10:35 Python哥 阅读(266) 评论(0) 推荐(0) 编辑
摘要: setDaemon(True): 将线程声明为守护线程,必须在start() 方法调用之前设置, 如果不设置为守护线程程序会被无限挂起。这个方法基本和join是相反的。 当我们 在程序运行中,执行一个主线程,如果主线程又创建一个子线程,主线程和子线程 就分兵两路,分别运行,那么当主线程完成 想退出时 阅读全文
posted @ 2018-05-29 20:06 Python哥 阅读(707) 评论(0) 推荐(0) 编辑
摘要: for i in range(10): passprint(i) 打印的结果就是9 打印的最后一次结果 阅读全文
posted @ 2018-05-29 17:54 Python哥 阅读(162) 评论(0) 推荐(0) 编辑
摘要: 运行的结果是: Beijing time is start 2018-05-29 17:37:18 Shanghai time is start 2018-05-29 17:37:18 Beijing time is over 2018-05-29 17:37:20 Done Shanghai ti 阅读全文
posted @ 2018-05-29 17:42 Python哥 阅读(931) 评论(0) 推荐(0) 编辑
摘要: 实例 1import threading #线程import timedef Say(n): print('Test %d' %n) time.sleep(2)if __name__ == '__main__': t1 = threading.Thread(target=Say,args=(10,) 阅读全文
posted @ 2018-05-29 17:24 Python哥 阅读(193) 评论(0) 推荐(0) 编辑
摘要: 什么是线程: 大白话;进程是一个具体的应用程序,线程是进程中的一个分支,为单独完成程序中的某一项或一组功能而存在。应用程序可以有一个或多个进程,一个进程可以有一个或多个线程,其中一个是主线程 前提: 1 我们有了进程概念后,不同程序之间完成切换,我们可以浏览网页 听歌等其他操作, 2 但是现在有另外 阅读全文
posted @ 2018-05-29 15:26 Python哥 阅读(159) 评论(0) 推荐(0) 编辑
摘要: 操作系统切换CPU的方式 1 IO等待切换. 2 时间轮询切换,也就是如果没有IO等待的情况下,就会有时间轮询切换,不让CPU一直处理一个任务 CPU的处理速度是纳秒级别的,所有我们可以同时听歌,看电影,浏览网页,其实这过程中,CPU 不断在切换,因为CPU处理速度实在太快,以至于我们人感官不出来中 阅读全文
posted @ 2018-05-29 15:02 Python哥 阅读(904) 评论(0) 推荐(0) 编辑
摘要: 多道程序设计, 用于解决顺序执行的问题: 真空管与穿孔卡片(无操作系统,也就是第一代操作系统) 在以前第一代计算机,处理任务,用的是卡片的方式,需要 输入 处理 输出 三部分组成 任务1卡片放入输入设备 然后到处理设备, 处理完成后,到输出设备打印结果,这时候如果有多个任务,就需要排队等待,比如这时 阅读全文
posted @ 2018-05-29 10:21 Python哥 阅读(477) 评论(0) 推荐(0) 编辑
摘要: 进程:本质上就是一段程序的运行过程(进程本身是一个抽象的概念) 假如有两个程序A和B,程序A在执行到一半的过程中,需要读取大量的数据输入(I/O操作),而此时CPU只能静静地等待任务A读取完数据才能继续执行,这样就白白浪费了CPU资源。是不是在程序A读取数据的过程中,让程序B去执行,当程序A读取完数 阅读全文
posted @ 2018-05-25 18:49 Python哥 阅读(147) 评论(0) 推荐(0) 编辑
摘要: import subprocessres = subprocess.Popen('dir',shell=True,stdout=subprocess.PIPE,stdin=subprocess.PIPE,stderr=subprocess.PIPE)print(res.stdout.read().d 阅读全文
posted @ 2018-05-25 11:16 Python哥 阅读(123) 评论(0) 推荐(0) 编辑
摘要: 什么是字符:字符编码(英语:Character encoding)也称字集码.大白话就是字符对应的0101这样的数字 就是字符跟数字一一对应的关系 比如:hello h --> 0101010 e --> 0101101 l --> 10101010 以上就是字符编码的表现形式 字符编码的发展史与分 阅读全文
posted @ 2018-05-23 10:01 Python哥 阅读(637) 评论(0) 推荐(0) 编辑
摘要: socket是什么 Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。所以,我们无需深入理 阅读全文
posted @ 2018-05-22 20:15 Python哥 阅读(161) 评论(0) 推荐(0) 编辑
摘要: inp = input(">>>>>")try: r = int(inp) print(r)except Exception as e: print(e)else: print("try内代码没有异常就执行else")finally: print("上面执行结果对错,我都执行")主动触发异常raise try: raise KeyError('错误')ex... 阅读全文
posted @ 2018-05-22 17:10 Python哥 阅读(74) 评论(0) 推荐(0) 编辑
摘要: 3 描述符分两种一 数据描述符:至少实现了__get__()和__set__() 二 非数据描述符:没有实现__set__() 阅读全文
posted @ 2018-05-21 19:54 Python哥 阅读(143) 评论(0) 推荐(0) 编辑
摘要: 用途或者说好处: 1.使用with语句的目的就是把代码块放入with中执行,with结束后,自动完成清理工作,无须手动干预 2.在需要管理一些资源比如文件,网络连接和锁的编程环境中,可以在__exit__中定制自动释放资源的机制,你无须再去关系这个问题,这将大有用处 阅读全文
posted @ 2018-05-21 19:39 Python哥 阅读(157) 评论(0) 推荐(0) 编辑
摘要: class F: def __init__(self,x): self.x = x def __iter__(self): #把对象 变成可迭代对象 return self def __next__(self): return self.xf = F(2)print(f.__next__()) # 阅读全文
posted @ 2018-05-21 18:22 Python哥 阅读(211) 评论(0) 推荐(0) 编辑
摘要: 对象后面加括号,触发执行。 注:构造方法的执行是由创建对象触发的,即:对象 = 类名() ;而对于 __call__ 方法的执行是由对象后加括号触发的,即:对象() 或者 类()() 阅读全文
posted @ 2018-05-21 15:29 Python哥 阅读(123) 评论(0) 推荐(0) 编辑
摘要: 析构方法,当对象在内存中被释放时(也就是实例执行完了,实例的内存就会自动释放,这时候就会触发),自动触发执行。 当程序结束时,python只会回收自己的内存空间,即用户态内存,而操作系统的资源则没有被回收,这就需要我们定制__del__,在对象被删除前向操作系统发起关闭数据库链接的系统调用,回收资源 阅读全文
posted @ 2018-05-21 15:26 Python哥 阅读(1051) 评论(0) 推荐(0) 编辑
摘要: __module__ 查看当前方法来之于那个文件 __class__ 查看当前方法来之于那个类 阅读全文
posted @ 2018-05-21 15:12 Python哥 阅读(141) 评论(0) 推荐(0) 编辑
摘要: #1 默认类里面默认提供的__str__方法,是返回类的内存地址class foo: def __init__(self): pass#2 修改类里面默认提供的__str__方法class fun: def __str__(self): return '自定制的对象显示方式' #这必须是要retur 阅读全文
posted @ 2018-05-21 14:14 Python哥 阅读(127) 评论(0) 推荐(0) 编辑
摘要: #__getitem__ __setitem__ __delitem__运行设置key value值了class fun: def __init__(self): print('test') def run(self): print('run') def __getitem__(self, item 阅读全文
posted @ 2018-05-18 20:53 Python哥 阅读(130) 评论(0) 推荐(0) 编辑
摘要: import timeclass FileHandle: def __init__(self,filename,mode,encoding='utf-8'): self.file = open(filename,mode,encoding=encoding) #1 获取open类操作,赋值给类里面f 阅读全文
posted @ 2018-05-18 16:12 Python哥 阅读(247) 评论(0) 推荐(0) 编辑
摘要: 设置一个属性操作的时候,执行 name 回电话 调用一个不存的对象属性时候,执行 ddddddd 删除一个属性时候,执行 yiii {'name': '回电话'} 注意: __getattr__ __delattr__ __setattr__ 触发条件是实例化后才能触发 阅读全文
posted @ 2018-05-17 16:51 Python哥 阅读(375) 评论(0) 推荐(0) 编辑
摘要: __import__ 用户字符串的形式导入模块(导入模块本身不能以字符串的形式导入,用了__import__后可以导入)func = __import__('test') 阅读全文
posted @ 2018-05-17 16:29 Python哥 阅读(103) 评论(0) 推荐(0) 编辑
摘要: class Room: def __init__(self,name): self.name = name def big_room(self): print('bigroot') R = Room('回电话') #hasattr 有没某个属性,存在返回True 不存在返回Fales print(hasattr(R,'name')) ... 阅读全文
posted @ 2018-05-17 16:04 Python哥 阅读(180) 评论(0) 推荐(0) 编辑
摘要: 继承 1 先说下什么是经典类 什么事是新式类 Python 2 当中类分为新式类和经典类 Python 3中全部叫新式类 python 2中如果有继承父类是object 就是新式类,继承其他类不算,但是如果继承其他类,其他类有其他了object 那就是新式类 经典类: class 类名: pass 阅读全文
posted @ 2018-05-17 10:01 Python哥 阅读(9153) 评论(2) 推荐(1) 编辑
摘要: staticmethod 返回函数的静态方法。该方法不强制要求传递参数,名义上在类里面归类管理,但是不能使用类的变量和实例的变量是类的工具包 如下声明一个静态方法: 阅读全文
posted @ 2018-05-16 14:45 Python哥 阅读(276) 评论(0) 推荐(0) 编辑
摘要: 通常情况下,如果我们要使用一个类的方法,那我们只能将一个类实体化成一个对象,进而调用对象使用方法。 式例 1 比如: class Hello(object): def __init__: ... def print_hello(self): print "Hello" class Hello(obj 阅读全文
posted @ 2018-05-16 14:28 Python哥 阅读(525) 评论(0) 推荐(0) 编辑
摘要: property 作用其实把类里面的逻辑给隐藏起来(封装逻辑,让用户调用的时候感知不到你的逻辑)property实例1:class Room: def __init__(self): pass @property #将函数属性变成静态属性(后面调用的时候,就不需要用x.status()来调用了,直接 阅读全文
posted @ 2018-05-16 10:54 Python哥 阅读(157) 评论(0) 推荐(0) 编辑
摘要: 类: 把一类事物的相同特和动作整合到一起就是类,类是一个抽象概论(比如人的特征:升高 年龄; 动作:吃饭睡觉等) 对象: 就是基于上面所说的类创建的一个具体事物(也就是具体存在的,比如一个人) 面向对象程序设计(英语:Object-oriented programming,缩写:OOP)是种具有对象 阅读全文
posted @ 2018-05-15 16:58 Python哥 阅读(196) 评论(0) 推荐(0) 编辑
摘要: 用于加密相关的操作,3.x里代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法 加严: 阅读全文
posted @ 2018-05-11 15:20 Python哥 阅读(129) 评论(0) 推荐(0) 编辑
摘要: import configparser #按字典方式操作 config = configparser.ConfigParser() #创建config 对象 #config对象test 等于 {'name':123,'password':'abc'} config['test'] = {'name':123, 'password':'abc'} #结... 阅读全文
posted @ 2018-05-11 15:10 Python哥 阅读(355) 评论(0) 推荐(0) 编辑
摘要: import re # findall 返回左右的满足匹配条件的结果放到列表 search 只要匹配到一个满足条件就不再进行匹配;并且把结果到对象里面 # 注意:*,+,?等都是贪婪匹配,也就是尽可能匹配,后面加?号使其变成惰性匹配 # "." 匹配任意字符 单个字符 有多少就匹配多少内容 print(re.findall("h..lo","workhellopython")) # ... 阅读全文
posted @ 2018-05-11 14:18 Python哥 阅读(217) 评论(0) 推荐(0) 编辑
摘要: import json z = ['1',23,] # data = json.dumps(z) #单引号全部处理成双引号,并且将所有内容变成字符串 print(data) #["1", 23] print(type(data)) # dic = json.loads(data) #字符串处理成相应的数据类型 print(dic)... 阅读全文
posted @ 2018-05-10 15:41 Python哥 阅读(195) 评论(0) 推荐(0) 编辑