生成器 generator ** 生成器指的是生成器对象,可以由生成器表达式得到,也可以使用 yield 关键字得到一个生成器函数,调用这个函数得到一个生成器对象。 生成器对象,是一个可迭代对象,是一个迭代器。 生成器对象,是延迟计算、惰性求值的。 # 生成器表达式m = (i for i in r ...
分类:
编程语言 时间:
2020-04-29 18:46:24
阅读次数:
71
一、什么是协程 引例: import time # 串行执行计算密集型的任务 1.2372429370880127 def func1(): for i in range(10000000): i + 1 def func2(): for i in range(10000000): i + 1 st ...
分类:
编程语言 时间:
2020-04-27 22:58:01
阅读次数:
99
Python来实现并发的Web Server,其中采用了多进程、多线程、协程、单进程单线程非阻塞的方式。 一、使用子进程来实现并发Web Server 参照 https://www.cnblogs.com/leokale-zz/p/11949208.html 中的代码,我们将其修改为支持并发的简单W ...
分类:
编程语言 时间:
2020-04-27 19:24:03
阅读次数:
58
死锁与递归锁(了解) 当你知道锁的使用抢锁必须要释放锁,其实你在操作锁的时候也极其容易产生死锁现象(整个程序卡死 阻塞) from threading import Thread, Lock import time mutexA = Lock() mutexB = Lock() # 类只要加括号多次 ...
分类:
编程语言 时间:
2020-04-27 17:50:22
阅读次数:
51
package main import ( "fmt" "sync" "time" ) /* 城管预警 ·监听城管大队 ·烧烤摊集群:监听城管大队,只要出动就发消息通知工会主席并进入阻塞等待至被唤醒,否则就提供露天烧烤 ·公关专员:摆平城管大队,并广播通知所有烧烤摊主 */ func main() ...
分类:
编程语言 时间:
2020-04-26 01:52:33
阅读次数:
87
package main import ( "fmt" "math" "strconv" "time" ) /* ·100条协程并发求1-10000平方根 ·最大并发数控制在5 ·管道实现 */ func GetSqrt(name string, n int, chSem chan string) ...
分类:
编程语言 时间:
2020-04-24 20:16:19
阅读次数:
82
package main import ( "fmt" "time" ) /* ·循环从一写两读三条管道中随机选择一条能走的路 ·等所有路都走不通了就退出循环 */ func main041() { chA := make(chan int, 5) chB := make(chan int, 4) ...
分类:
编程语言 时间:
2020-04-24 20:14:05
阅读次数:
67
package main import ( "fmt" "strconv" "time" ) /* 改进生产者消费者模型 ·生产者每秒生产一件商品,并通知物流公司取货 ·物流公司将商品运输到商店 ·消费者阻塞等待从商店消费 ·消费10轮就主协程结束 ·尝试在整分钟时通知生产者罢工,生产者罢工时主协程 ...
分类:
编程语言 时间:
2020-04-24 19:58:50
阅读次数:
94
如果你想了解异步编程,那么必然会涉及出许多相关概念。 堵塞/非堵塞 同步/异步 多进程/多线程/协程 为什么我要学习这个话,因为我想搞懂异步框架和异步接口的调用。所以,我的学习路线是这样的: 1.python异步编程 2.python Web异步框架(tornado/sanic) 3.异步接口调用( ...
分类:
编程语言 时间:
2020-04-22 22:54:38
阅读次数:
76
原理 回顾一下OpenResty的架构图 OpenResty 的 master 和 worker 进程中,都包含一个 LuaJIT VM。在同一个进程内的所有协程,都会共享这个 VM,并在这个 VM 中运行 Lua 代码。 在同一个时间点上,每个 worker 进程只能处理一个用户的请求,也就是只有 ...
分类:
其他好文 时间:
2020-04-20 23:59:35
阅读次数:
109