
进程线程和协程
文章平均质量分 82
Spade_
故不积跬步,无以至千里;不积小流,无以成江海。持续精进,刻意练习。
展开
-
[Python] 浅谈对Python协程的理解
浅谈对Python协程的理解Python的协程也算是一个很重要的知识点了,我从刚刚开始的懵懵懂懂一知半解,到后面翻了很多书之后算是贯通一些了,因此我在此谈谈个人对Python协程的理解。对比了《Python高级编程》、《流畅的Python》等书对协程的描写,我总结了以下看法:1. 你的底层库函数必须是异步的、不IO阻塞的首先,要想实现协程,你的底层协程函数必须是异步的、不IO阻塞的。这句话很关键,你要确保你底层的协程不是IO阻塞的,能通过 yield from 交出控制权给调度程序,同时还要在IO操原创 2021-03-15 22:50:01 · 520 阅读 · 2 评论 -
[Python] future线程处理并发的核心源码详解
ThreadPoolExecutor 核心工作详解ThreadPoolExecutor内部是如何工作的?什么是future对象?线程什么时候被创建?任务是如何被线程处理的?结束之后如何销毁的1. ThreadPoolExecutor我们所有的工作都是在ThreadPoolExecutor完成的:with futures.ThreadPoolExecutor(max_workers=2) as executor: ...executor中定义了几个关键的变量。class Th原创 2020-12-27 22:25:00 · 638 阅读 · 1 评论 -
[Python] 使用futures模块处理并发(超好用的并发库)
使用futures模块处理并发concurrent.futures模块的主要特色是ThreadPoolExecutor和ProcessPoolExecutor类,这两个类实现的接口能分别在不同的线程或进程中执行可调用的对象。这两个类在内部维护着一个工作线程或进程池,以及要执行的任务队列。ThreadPoolExecutor和ProcessPoolExecutor的API接口一样,本文重点讲解ThreadPoolExecutor的用法。一、用法示例1. 使用 map() 处理多个任务使用两行代码,就能原创 2020-12-27 22:23:22 · 3113 阅读 · 0 评论 -
[Python] 理解yield关键字、生成器函数和协程
理解yield关键字、生成器函数和协程写作背景从生成器函数到协程1. yield、生成器和生成器函数2. next()和send(None)3. send()和next()的C语言实现4. send() 给生成器函数传值5. 使用Pycharm的DEBUG模式理解data = yield item的执行过程协程1. 什么是协程?2. 个人对yield和协程的理解3. 区别生成器函数和协程期待再会...写作背景主旨:介绍yield关键字的用法、生成器和生成器函数什么是协程、生成器函数和协程的区别从原创 2020-12-17 23:31:02 · 745 阅读 · 0 评论 -
[Python] 线程安全的单例模式日志模块
"""我们的目的是借助单例模式,只生成一个logger。当日志文件已经存在时,默认以追加方式写入。"""import loggingimport osimport timeimport sysimport threadingdef synchronized(func): func.__lock__ = threading.Lock() def lock_func(*args, **kwargs): with func.__lock__:原创 2020-11-16 19:47:23 · 429 阅读 · 0 评论 -
[Python] 多线程同步问题——信箱传递
题目有n个线程,向同一个信箱(信箱的大小为k)里传递消息,放入的消息为数字i(i=1…n),有m个线程从信箱里取数字,取出来将数字*10并打印。代码实现"""有n个线程,向同一个信箱(信箱的大小为k)里传递消息,放入的消息为数字i(i=1...n),有m个线程从信箱里取数字,取出来将数字*10并打印。"""import timeimport randomfrom threading import Thread, Semaphore, Locklist_len = 5in_index, o原创 2020-10-29 23:09:44 · 291 阅读 · 0 评论 -
[Python] 多进程和多线程在共享资源上的区别
独立与非独立的内存空间同一进程的线程共享本进程的地址空间和资源,而进程之间的地址空间和资源相互独立。我们看一个简单的例子,使用多个线程/进程向同一个list内添加值。多线程的代码这样写:from threading import Thread, Lockimport timedef func(nums, i, lock: Lock): lock.acquire() # 打印控制台是共享资源,需要请求锁 print(f"Thr原创 2020-10-29 23:01:53 · 648 阅读 · 0 评论