随笔分类 -  Python

上一页 1 ··· 3 4 5 6 7 8 下一页
摘要:event=Event() event.isSet() # 返回event的状态值 True False event.wait() #等待其他线程发出event.set()后才继续往下执行 event.isSet() == False 将阻塞线程 event.wait(3) #如果超过3秒,即使没有 阅读全文
posted @ 2018-06-17 08:54 beallaliu 阅读(342) 评论(0) 推荐(0)
摘要:互斥锁和排斥锁 同一时间只能有一个线程处理同一段代码。比如,只有一个坑的卫生间 信号量:同时最多可以有N个线程同时处理同一段代码。 比如有3个坑的卫生间,最多可以有三个人同时使用。 运行结果: 线程0 正在占坑。。。 线程1 正在占坑。。。 线程2 正在占坑。。。 线程3 正在占坑。。。 线程5 正 阅读全文
posted @ 2018-06-16 23:24 beallaliu 阅读(137) 评论(0) 推荐(0)
摘要:1. 排斥锁可能会造成死锁,先看看死锁的现象 运行结果: Thread-1 拿到了A锁 Thread-1 拿到了B锁 Thread-1 拿到了B锁 Thread-2 拿到了A锁 卡住了。。。。。。 2. 互斥锁Lock,只能acquire()一次, 递归锁RLock可以acquire()多次 3. 阅读全文
posted @ 2018-06-16 22:57 beallaliu 阅读(234) 评论(0) 推荐(0)
摘要:GIL锁是解释器级别的锁,跟垃圾回收有关系, python执行代码,要先获得解释器的锁GIL。 但GIL锁保证不了代码的数据。 不同的数据要有不同的锁。 计算密集型用多进程,IO密集型用多线程。多线程有并发,没有并行的优势。 阅读全文
posted @ 2018-06-16 21:13 beallaliu 阅读(120) 评论(0) 推荐(0)
摘要:运行结果: 主 99 加了互斥锁: 运行结果: 主 0 互斥锁的作用:将并行变成串行。保护不同的数据,加不同的锁。 多线程用不到多核CPU的优势,它只能并发,不能并行。并发:看起来像同时运行,并行:多核同时运行. 阅读全文
posted @ 2018-06-16 20:41 beallaliu 阅读(139) 评论(0) 推荐(0)
摘要:守护进程与守护线程的区别: 守护进程:主进程代码运行完后,守护进程就终止。 守护线程:主进程运行完后,守护线程就终止。不过,如果主线程有多个线程的话, 其他线程未执行完,主线程就还在。守护线程会等主进程下的所有线程都执行完才终止。 守护进程: 运行结果: 主线程 True 守护线程: 运行结果: 守 阅读全文
posted @ 2018-06-16 20:23 beallaliu 阅读(108) 评论(0) 推荐(0)
摘要:Thread实例对象的方法: getName(): 返回线程名 setName('XXX'): 设置线程名 is_alive(): 线程是否存活 threading模块提供的一些方法: threading.current_thread() : 返回当前线程的变量 threading. enumera 阅读全文
posted @ 2018-06-16 19:25 beallaliu 阅读(165) 评论(0) 推荐(0)
摘要:方式一: 方式二: 阅读全文
posted @ 2018-06-16 18:39 beallaliu 阅读(170) 评论(0) 推荐(0)
摘要:线程与进程的区别: 1. 同一进程的线程间共享内存资源,进程间内存资源是独立的 1.1 进程: 输出: 主线程 100 1.2 线程: 输出: 主线程 0 2. 开进程开销大,开线程开销小 2.1 线程: import time from threading import Thread from m 阅读全文
posted @ 2018-06-16 18:28 beallaliu 阅读(181) 评论(0) 推荐(0)
摘要:用途: 程序中有两类角色,一类用来生产数据,一类用来消费数据。 生产者消费者模型引入队列 解耦合 如果使用multiprocessing中的Queue的这种生产消费模型,必须在同一台机器上,集中式 如何分布? 阅读全文
posted @ 2018-06-16 17:54 beallaliu 阅读(124) 评论(0) 推荐(0)
摘要:运行结果: True 1 ['1,', 2, ''] {'a': 1} True 阅读全文
posted @ 2018-06-16 17:48 beallaliu 阅读(77) 评论(0) 推荐(0)
摘要:路人0 正在查询剩余票数。。。。路人1 正在查询剩余票数。。。。路人2 正在查询剩余票数。。。。路人3 正在查询剩余票数。。。。路人4 正在查询剩余票数。。。。路人6 正在查询剩余票数。。。。路人5 正在查询剩余票数。。。。路人7 正在查询剩余票数。。。。路人8 正在查询剩余票数。。。。路人9 正在 阅读全文
posted @ 2018-06-16 17:01 beallaliu 阅读(96) 评论(0) 推荐(0)
摘要:互斥锁:并发串行,是对代码的局部做串型。是共享数据修改的那块代码变成串型。 join: join也是并发串行的。但是join是全局的串型。 互斥锁:牺牲效率保证数据的安全。 队列:效率+数据安全,详见队列一文 进程之间内存是独立的,但其他资源是共享的,如可以操作同一个文件。 没有互斥锁的情况下,以下 阅读全文
posted @ 2018-06-16 14:14 beallaliu 阅读(107) 评论(0) 推荐(0)
摘要:子进程设置为守护进程后,在主进程代码执行结束(而非进程退出)后,子进程就终止。 如果子进程没有设置为守护进程,那么主进程会等子进行结束才结束主进程。 1. 守护进程的设置必须在start前设置。 2. 守护进程无法再开启子进程。 验证守护进程无法再开启子进程: 输出结果: 报错: 守护进程练习题: 阅读全文
posted @ 2018-06-16 13:51 beallaliu 阅读(454) 评论(0) 推荐(0)
摘要:1. 进程之间内存空间是隔离还是共享的? 请看代码的输出结果: from multiprocessing import Process n=100 #在windows系统中应该把全局变量定义在if __name__ == '__main__'之上就可以了 def work(): global n n 阅读全文
posted @ 2018-06-16 13:28 beallaliu 阅读(136) 评论(0) 推荐(0)
摘要:p.start() # 只是将命令交给操作系统,操作系统什么时候执行,主进程并不关心。主进程执行完p.start()交给操作系统后,就会立马执行下一条语句。 p.join() # 当主进程执行到p.join()时,会就等待p子进程执行完后,再继续下一语句。 不过,注意了,如果有多个子进程,并不是串行 阅读全文
posted @ 2018-06-16 10:47 beallaliu 阅读(140) 评论(0) 推荐(0)
摘要:僵尸进程:一个子进程在其父进程还没有调用wait()或waitpid()的情况下退出。这个子进程就是僵尸进程。任何一个子进程(init除外)在exit()之后,并非马上就消失掉,而是留下一个称为僵尸进程(Zombie)的数据结构,等待父进程处理。这是每个 子进程在结束时都要经过的阶段。如果子进程在e 阅读全文
posted @ 2018-06-16 10:09 beallaliu 阅读(210) 评论(0) 推荐(0)
摘要:获取本进程id: os.getpid() 或: 获取父进程id: os.getppid() 阅读全文
posted @ 2018-06-16 09:33 beallaliu 阅读(668) 评论(0) 推荐(0)
摘要:当主进程开启子进程后,主进程会与子进程并行执行。当主进程执行后不会立马结束进程,而是会等子进程结束才结束,好去清理僵尸子进程(给子进程收尸)。 进程之间内存是相互隔离的。当创建子进程时,会把父进程的内存空间拷贝一份到子进程,子进程的改变不会影响主进程的内存空间。 但进程之间的IO是共享的,可以同时操 阅读全文
posted @ 2018-06-16 09:20 beallaliu 阅读(306) 评论(0) 推荐(0)
摘要:操作系统作用: 1. 封装硬件的复杂接口 2. 管理操作系统上的多个进程 阅读全文
posted @ 2018-06-12 22:27 beallaliu 阅读(200) 评论(0) 推荐(0)

上一页 1 ··· 3 4 5 6 7 8 下一页