随笔分类 - Python 高级
摘要:#pep380 #1. RESULT = yield from EXPR可以简化成下面这样 #一些说明 """ _i:子生成器,同时也是一个迭代器 _y:子生成器生产的值 _r:yield from 表达式最终的值 _s:调用方通过send()发送的值 _e:异常对象 """ _i = iter(EXPR) # EXPR是一个可迭代对象,_i其实是子生成器; try: _...
阅读全文
摘要:1. yield from 会抛出iterator中所有的值;而yield只是抛出传进来的值,如果是值,就抛出值,如果是iterator对象,抛出iterator对象 输出: 2. yield from会在调用方与子生成器之间建立一个双向通道 输出:
阅读全文
摘要:send 1. yield可以产出值,可以接收值 2. 在调用send发送非none值之前,我们必须启动一次生成器, 方式有两种 a. gen.send(None) b. next(gen) close 不要随便try catch 如果要捕获异常,那么必须抛出StopIteration throw
阅读全文
摘要:1. 使用类实现比较方便我们使用里面的参数 2. 我们使用selector,不适用select 3. I/O多路复用是指使用 回调+事件循环+select(poll\epoll) a. 使用selector注册,并注册回调函数 b. 使用事件循环一直循环,查询状态 c. 使用select调用相应的回
阅读全文
摘要:1. 不能使用python自带的queue进行通信,不然无法接受到数据 2. 必须使用multiprocessing中的Queue 3. 全局变量不适用于多进程编程,可以使用与多线程编程 4. multiprocessing中的queue不能用于pool进程池, pool中的进程间通信需要使用man
阅读全文
摘要:def get_html(n): time.sleep(n) print("sub_progress success") return n # 多进程池 pool = multiprocessing.Pool(multiprocessing.cpu_count()) result = pool.apply_async(get_html, args=(3,)) # 类...
阅读全文
摘要:1. 对于耗费CPU的操作来说,多进程优于多线程 2. 对于耗费IO操作来说,多线程优于多进程 3. 多进程切换代价大于多线程 4. 协程适用于:密集网络IO,适合网络IO
阅读全文
摘要:1. Future内部还是用了condition这个锁 2. Cancel 2. result 3. set_result
阅读全文
摘要:future: 未来对象,或task的返回容器 1. 当submit后: 2. _adjust_thread_count: 3. _worker: 4. WorkItem
阅读全文
摘要:获取成功的task返回 方法一: 方法二: wait,wait第几个任务执行完了以后才执行主线程,不然的话主线程会一直阻塞
阅读全文
摘要:#Semaphore 是用于控制进入数量的锁,控制同时进行的线程,内部是基于Condition来进行实现的 #文件, 读、写, 写一般只是用于一个线程写,读可以允许有多个 #做爬虫 import threading import time class HtmlSpider(threading.Thread): def __init__(self, url, sem): ...
阅读全文
摘要:condition有两层锁: 1. 一把底层锁会在线程调用了wait方法的时候释放(是先创建一把锁(这就是第二把锁),然后再release),底层还是Lock或者RLock, 2.第二把锁会在每次调用wait的时候创建一把新的,并放入到cond的等待队列中(采用的是dqueue),一直acquire
阅读全文
摘要:Lock: 只能acquire一次,下一次acquire必须release后才能,不然会造成死锁 RLock: 在同一个线程里面,可以连续调用多次acquire, 一定要注意acquire的次数要和release的次数相等
阅读全文
摘要:#通过queue的方式进行线程间同步,Queue在底层通过实现了dqueue(双生队列,在字节码时实现了线程安全)实现了线程安全 from queue import Queue import time import threading def get_detail_html(queue): #爬取文章详情页 while True: url = queue....
阅读全文
摘要:GIL: Global Interpreter Lock,相当于一个锁 python中一个线程对应于c语言中的一个线程,gil使得同一个时刻只有一个线程在一个cpu上执行字节码, 无法将多个线程映射到多个cpu(一个CPU一核)或多核CPU上执行,gil会根据执行的字节码行数以及时间片释放gil,g
阅读全文
摘要:服务器: 客户端: socket模拟http请求: socker类型介绍:
阅读全文
摘要:from collections.abc import Iterator class Company(object): def __init__(self, employee_list): self.employee = employee_list def __iter__(self): return MyIterator(self.emplo...
阅读全文
摘要:使用json.dump()的时候设置一下indent参数的值就好了。比如json.dump(json_dict, f, indent=4), ensure_ascii=False,写入中文
阅读全文

浙公网安备 33010602011771号