摘要: from threading import Timer import random class Code: def __init__(self): self.make_cache() def make_cache(self,interval =15):#生成的验证码保存在cache里,过15s重新生成验证码,更新cache s... 阅读全文
posted @ 2018-03-09 17:59 Claire_xu 阅读(157) 评论(0) 推荐(0) 编辑
摘要: 线程间互相等状态。 阅读全文
posted @ 2018-03-09 17:42 Claire_xu 阅读(141) 评论(0) 推荐(0) 编辑
摘要: 信号量相当于一个锁锁着的房间里的多个床位,同一时间可以有多个线程获得信号量,而锁则只能被一个线程获得。 阅读全文
posted @ 2018-03-09 16:25 Claire_xu 阅读(146) 评论(0) 推荐(0) 编辑
摘要: Lock() 互斥锁会导致死锁,用RLock()递归锁代替。 递归锁:可以连续acquire多次,每acquire一次计数器+1(无论acquire的是哪个锁),只有计数为0才能被acquire 阅读全文
posted @ 2018-03-09 16:19 Claire_xu 阅读(130) 评论(0) 推荐(0) 编辑
摘要: GIL不是Python特性,是CPython解释器特性,因为CPython有垃圾回收机制。 GIL 本质是互斥锁,保护解释器安全。 保证线程安全,垃圾回收线程不会和其他线程一起运行。 多个线程不能实现真正并行,因为解释器GIL锁的原因(同一时间解释器只执行一个线程),但是,线程A取得GIL锁后可能因 阅读全文
posted @ 2018-03-09 15:55 Claire_xu 阅读(279) 评论(0) 推荐(0) 编辑
摘要: 1、开进程的开销远大于开线程 1、其他线程都结束后,主线程才会结束,守护线程才会结束。即守护线程要等其他所有非守护线程结束后才会结束 2、其他线程都结束后,主线程才会结束,主进程才会结束,守护进程才会结束。貌似守护进程和守护线程是相同条件下结束。 阅读全文
posted @ 2018-03-09 15:09 Claire_xu 阅读(1071) 评论(0) 推荐(0) 编辑
摘要: 进程和线程模块下都有队列类。 线程队列: 进程队列: JoinableQueue示例: 阅读全文
posted @ 2018-03-09 12:28 Claire_xu 阅读(109) 评论(0) 推荐(0) 编辑
摘要: 进程实现: 阅读全文
posted @ 2018-03-09 12:13 Claire_xu 阅读(120) 评论(0) 推荐(0) 编辑