摘要: 单例模式应用的场景一般发现在以下条件下: 资源共享的情况下,避免由于资源操作时导致的性能或损耗等,如日志文件,应用配置。 控制资源的情况下,方便资源之间的互相通信。如线程池等, 1.网站的计数器 2,应用配置 3.多线程池 4. 数据库配置 数据库连接池 5.应用程序的日志应用 阅读全文
posted @ 2020-08-31 23:58 anobscureretreat 阅读(1384) 评论(0) 推荐(0) 编辑
摘要: 在函数内部再定义一个函数,并且这个函数用到了外边函数的变量,那么将这个函数以及用到的一些变 量称之为闭包。 阅读全文
posted @ 2020-08-31 23:55 anobscureretreat 阅读(159) 评论(0) 推荐(0) 编辑
摘要: 装饰器本质上是一个callable object,它可以在让其他函数在不需要做任何代码的变动的前提下增加额 外的功能。装饰器的返回值也是一个函数的对象,它经常用于有切面需求的场景。比如:插入日志,性 能测试,事务处理,缓存。权限的校验等场景,有了装饰器就可以抽离出大量的与函数功能本身无关的 雷同代码 阅读全文
posted @ 2020-08-31 23:54 anobscureretreat 阅读(452) 评论(0) 推荐(1) 编辑
摘要: 迭代器是遵循迭代协议的对象。用户可以使用 iter() 以从任何序列得到迭代器(如 list, tuple, dictionary, set 等)。另一个方法则是创建一个另一种形式的迭代器 —— generator 。要获取下一个元 素,则使用成员函数 next()(Python 2)或函数 nex 阅读全文
posted @ 2020-08-31 23:52 anobscureretreat 阅读(186) 评论(0) 推荐(0) 编辑
摘要: yield就是保存当前程序执行状态。你用for循环的时候,每次取一个元素的时候就会计算一次。用yield 的函数叫generator,和iterator一样,它的好处是不用一次计算所有元素,而是用一次算一次,可以节 省很多空间,generator每次计算需要上一次计算结果,所以用yield,否则一r 阅读全文
posted @ 2020-08-31 23:50 anobscureretreat 阅读(152) 评论(0) 推荐(0) 编辑
摘要: 不可变对象,该对象所指向的内存中的值不能被改变。当改变某个变量时候,由于其所指的值不能被改 变,相当于把原来的值复制一份后再改变,这会开辟一个新的地址,变量再指向这个新的地址。 可变对象,该对象所指向的内存中的值可以被改变。变量(准确的说是引用)改变后,实际上其所指的 值直接发生改变,并没有发生复制 阅读全文
posted @ 2020-08-31 23:48 anobscureretreat 阅读(121) 评论(0) 推荐(0) 编辑
摘要: code s1='_aai0efe00' res=re.findall('^[a-zA-Z_]?[a-zA-Z0-9_]{1,}\d$',s1) print(res) 阅读全文
posted @ 2020-08-31 23:42 anobscureretreat 阅读(732) 评论(0) 推荐(0) 编辑
摘要: import re pattern = re.compile(u'[\uD800-\uDBFF][\uDC00-\uDFFF]') pattern.sub('',text) 阅读全文
posted @ 2020-08-31 23:41 anobscureretreat 阅读(199) 评论(0) 推荐(0) 编辑
摘要: 这个问题被问的概念相当之大, 进程:一个运行的程序(代码)就是一个进程,没有运行的代码叫程序,进程是系统资源分配的最小单 位,进程拥有自己独立的内存空间,所有进程间数据不共享,开销大。 线程: cpu调度执行的最小单位,也叫执行路径,不能独立存在,依赖进程存在,一个进程至少有一个线 程,叫主线程,而 阅读全文
posted @ 2020-08-31 23:35 anobscureretreat 阅读(244) 评论(0) 推荐(0) 编辑
摘要: 线程是非独立的,同一个进程里线程是数据共享的,当各个线程访问数据资源时会出现竞争状态即:数 据几乎同步会被多个线程占用,造成数据混乱,即所谓的线程不安全 那么怎么解决多线程竞争问题? 锁 锁的好处: 确保了某段关键代码(共享数据资源)只能由一个线程从头到尾完整地执行能解决多线程资 源竞争下的原子操作 阅读全文
posted @ 2020-08-31 23:30 anobscureretreat 阅读(360) 评论(0) 推荐(0) 编辑
摘要: 锁(Lock)是python提供的对线程控制的对象。有互斥锁,可重入锁,死锁。 阅读全文
posted @ 2020-08-31 23:27 anobscureretreat 阅读(361) 评论(0) 推荐(0) 编辑
摘要: 若干子线程在系统资源竞争时,都在等待对方对某部分资源解除占用状态,结果是谁也不愿先解锁,互 相干等着,程序无法执行下去,这就是死锁。 GIL锁 全局解释器锁 作用: 限制多线程同时执行,保证同一时间只有一个线程执行,所以cython里的多线程其实是伪多线 程! 所以python里常常使用协程技术来代 阅读全文
posted @ 2020-08-31 23:20 anobscureretreat 阅读(179) 评论(0) 推荐(0) 编辑
摘要: 怎么避免重读? 创建一个已访问数据列表,用于存储已经访问过的数据,并加上互斥锁,在多线程访问数据的时候先查 看数据是否在已访问的列表中,若已存在就直接跳过。 阅读全文
posted @ 2020-08-31 23:19 anobscureretreat 阅读(156) 评论(0) 推荐(0) 编辑
摘要: 每个对象都对应于一个可称为’互斥锁‘的标记,这个标记用来保证在任一时刻,只能有一个线程访问该 对象。 同一进程中的多线程之间是共享系统资源的,多个线程同时对一个对象进行操作,一个线程操作尚未结 束,另一线程已经对其进行操作,导致最终结果出现错误,此时需要对被操作对象添加互斥锁,保证每 个线程对该对象 阅读全文
posted @ 2020-08-31 23:18 anobscureretreat 阅读(283) 评论(0) 推荐(0) 编辑
摘要: 同步: 多个任务之间有先后顺序执行,一个执行完下个才能执行。 异步: 多个任务之间没有先后顺序,可以同时执行,有时候一个任务可能要在必要的时候获取另一个同 时执行的任务的结果,这个就叫回调! 阻塞: 如果卡住了调用者,调用者不能继续往下执行,就是说调用者阻塞了。 非阻塞: 如果不会卡住,可以继续执行 阅读全文
posted @ 2020-08-31 23:13 anobscureretreat 阅读(137) 评论(0) 推荐(0) 编辑
摘要: 孤儿进程: 父进程退出,子进程还在运行的这些子进程都是孤儿进程,孤儿进程将被init 进程(进程号 为1)所收养,并由init 进程对他们完成状态收集工作。 僵尸进程: 进程使用fork 创建子进程,如果子进程退出,而父进程并没有调用wait 获waitpid 获取子进 程的状态信息,那么子进程的进 阅读全文
posted @ 2020-08-31 23:11 anobscureretreat 阅读(363) 评论(0) 推荐(0) 编辑
摘要: 多进程适合在CPU密集操作(cpu操作指令比较多,如位多的的浮点运算)。 多线程适合在IO密性型操作(读写数据操作比多的的,比如爬虫) 阅读全文
posted @ 2020-08-31 23:08 anobscureretreat 阅读(282) 评论(0) 推荐(0) 编辑
摘要: 并行: 同一时刻多个任务同时在运行 并发:不会在同一时刻同时运行,存在交替执行的情况。 实现并行的库有: multiprocessing 实现并发的库有: threading 程序需要执行较多的读写、请求和回复任务的需要大量的IO操作,IO密集型操作使用并发更好。 CPU运算量大的程序,使用并行会更 阅读全文
posted @ 2020-08-31 23:06 anobscureretreat 阅读(860) 评论(0) 推荐(0) 编辑
摘要: IO密集型: 系统运行,大部分的状况是CPU在等 I/O(硬盘/内存)的读/写 CPU密集型: 大部分时间用来做计算,逻辑判断等CPU动作的程序称之CPU密集型。 阅读全文
posted @ 2020-08-31 23:05 anobscureretreat 阅读(1460) 评论(0) 推荐(0) 编辑
摘要: 一个客户端运行了新的命令,添加了新的数据。 redis检查内存使用情况,如果大于maxmemory的限制,则根据设定好的策略进行回收。 一个新的命令被执行等等,所以我们不断地穿越内存限制的边界,通过不断达到边界然后不断回收回到 边界以下。 如果一个命令的结果导致大量内存被使用(例如很大的集合的交集保 阅读全文
posted @ 2020-08-31 23:03 anobscureretreat 阅读(660) 评论(0) 推荐(0) 编辑