摘要: 一、greenlet模块 如果我们在单个线程内有20个任务,要想实现在多个任务之间切换,使用yield生成器的方式过于麻烦(需要先得到初始化一次的生成器,然后再调用send。。。非常麻烦),而使用greenlet模块可以非常简单地实现这20个任务直接的切换。 from greenlet import 阅读全文
posted @ 2020-07-30 12:03 zoling7 阅读(139) 评论(0) 推荐(0) 编辑
摘要: 一、前言 本节的主题是基于单线程来实现并发,即只用一个主线程(很明显可利用的cpu只有一个)情况下实现并发,为此我们需要先回顾下并发的本质:切换+保存状态。 协程指的就是单线程下实现并发 cpu正在运行一个任务,会在两种情况下切走去执行其他的任务(切换由操作系统强制控制),一种情况是该任务发生了阻塞 阅读全文
posted @ 2020-07-30 09:56 zoling7 阅读(128) 评论(0) 推荐(0) 编辑
摘要: 一、同步调用 提交任务有两种方式:同步调用,异步调用。 同步调用:提交完任务后,就在原地等待任务执行完毕,拿到结果再执行下一行代码,导致程序是串行执行。 例子:今年你们公司开年会,举办了一个吃汉堡大赛,然后把计算下大家一共吃了多少个,谁的最多,谁发的年终奖就最多。 # 1,同步调用:提交完任务后,就 阅读全文
posted @ 2020-07-29 15:36 zoling7 阅读(239) 评论(0) 推荐(0) 编辑
摘要: 一、进程池与线程池 在刚开始学多进程或多线程时,我们迫不及待地基于多进程或多线程实现并发的套接字通信。 然而这种实现方式的致命缺陷是:服务的开启的进程数或线程数都会随着并发的客户端数目地增多而增多,这会对服务端主机带来巨大的压力,甚至于不堪重负而瘫痪。 于是我们必须对服务端开启的进程数或线程数加以控 阅读全文
posted @ 2020-07-29 15:16 zoling7 阅读(319) 评论(0) 推荐(0) 编辑
摘要: 一、线程queue 1,定义: queue队列 :使用 import queue,用法与进程 Queue一样。 queue is especially useful in threaded programming when information must be exchanged safely b 阅读全文
posted @ 2020-07-29 12:57 zoling7 阅读(264) 评论(0) 推荐(0) 编辑
摘要: 一、信号量(Semaphore) 信号量也是一把锁,可以指定信号量为5,对比互斥锁同一时间只能有一个任务抢到锁去执行,信号量同一时间可以有5个任务拿到锁去执行,如果说互斥锁是合租房屋的人去抢一个厕所,那么信号量就相当于一群路人争抢公共厕所,公共厕所有多个坑位,这意味着同一时间可以有多个人上公共厕所, 阅读全文
posted @ 2020-07-29 11:12 zoling7 阅读(207) 评论(0) 推荐(0) 编辑
摘要: 一、引言 定义: ''' 定义: In CPython, the global interpreter lock, or GIL, is a mutex that prevents multiple native threads from executing Python bytecodes at 阅读全文
posted @ 2020-07-28 18:01 zoling7 阅读(131) 评论(0) 推荐(0) 编辑
摘要: 一、守护线程 无论是进程还是线程,都遵循:守护xxx会等待主xxx运行完毕后被销毁。 需要强调的是:运行完毕并非终止运行。 # 1,对主进程来说,运行完毕指的是主进程代码运行完毕。 # 2,对主线程来说,运行完毕指的是主线程所在的进程内所有非守护线程统统运行完毕,主线程才算运行完毕。 详细解释: # 阅读全文
posted @ 2020-07-27 19:26 zoling7 阅读(121) 评论(0) 推荐(0) 编辑
摘要: 一、Thread 对象的其他属性或方法 1,介绍: Thread实例对象的方法 # isAlive(): 返回线程是否活动的。 # getName(): 返回线程名。 # setName(): 设置线程名。 threading模块提供的一些方法: # threading.currentThread( 阅读全文
posted @ 2020-07-27 18:57 zoling7 阅读(106) 评论(0) 推荐(0) 编辑
摘要: 一、谁的开启速度快? 1,在主进程下开启子进程 import time from multiprocessing import Process def say_hi(name): print('%s say hi!' % name) time.sleep(2) print('%s say hello 阅读全文
posted @ 2020-07-27 17:25 zoling7 阅读(139) 评论(0) 推荐(0) 编辑