摘要: 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 阅读(226) 评论(0) 推荐(0) 编辑
摘要: GIL锁是解释器级别的锁,跟垃圾回收有关系, python执行代码,要先获得解释器的锁GIL。 但GIL锁保证不了代码的数据。 不同的数据要有不同的锁。 计算密集型用多进程,IO密集型用多线程。多线程有并发,没有并行的优势。 阅读全文
posted @ 2018-06-16 21:13 beallaliu 阅读(112) 评论(0) 推荐(0) 编辑
摘要: 运行结果: 主 99 加了互斥锁: 运行结果: 主 0 互斥锁的作用:将并行变成串行。保护不同的数据,加不同的锁。 多线程用不到多核CPU的优势,它只能并发,不能并行。并发:看起来像同时运行,并行:多核同时运行. 阅读全文
posted @ 2018-06-16 20:41 beallaliu 阅读(136) 评论(0) 推荐(0) 编辑
摘要: 守护进程与守护线程的区别: 守护进程:主进程代码运行完后,守护进程就终止。 守护线程:主进程运行完后,守护线程就终止。不过,如果主线程有多个线程的话, 其他线程未执行完,主线程就还在。守护线程会等主进程下的所有线程都执行完才终止。 守护进程: 运行结果: 主线程 True 守护线程: 运行结果: 守 阅读全文
posted @ 2018-06-16 20:23 beallaliu 阅读(105) 评论(0) 推荐(0) 编辑
摘要: Thread实例对象的方法: getName(): 返回线程名 setName('XXX'): 设置线程名 is_alive(): 线程是否存活 threading模块提供的一些方法: threading.current_thread() : 返回当前线程的变量 threading. enumera 阅读全文
posted @ 2018-06-16 19:25 beallaliu 阅读(161) 评论(0) 推荐(0) 编辑
摘要: 方式一: 方式二: 阅读全文
posted @ 2018-06-16 18:39 beallaliu 阅读(162) 评论(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 阅读(170) 评论(0) 推荐(0) 编辑
摘要: 用途: 程序中有两类角色,一类用来生产数据,一类用来消费数据。 生产者消费者模型引入队列 解耦合 如果使用multiprocessing中的Queue的这种生产消费模型,必须在同一台机器上,集中式 如何分布? 阅读全文
posted @ 2018-06-16 17:54 beallaliu 阅读(120) 评论(0) 推荐(0) 编辑
摘要: 运行结果: True 1 ['1,', 2, ''] {'a': 1} True 阅读全文
posted @ 2018-06-16 17:48 beallaliu 阅读(74) 评论(0) 推荐(0) 编辑
摘要: 路人0 正在查询剩余票数。。。。路人1 正在查询剩余票数。。。。路人2 正在查询剩余票数。。。。路人3 正在查询剩余票数。。。。路人4 正在查询剩余票数。。。。路人6 正在查询剩余票数。。。。路人5 正在查询剩余票数。。。。路人7 正在查询剩余票数。。。。路人8 正在查询剩余票数。。。。路人9 正在 阅读全文
posted @ 2018-06-16 17:01 beallaliu 阅读(93) 评论(0) 推荐(0) 编辑