![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
py
文章平均质量分 73
__xa__
.
展开
-
Django asyncio 配合使用
被问到如何在django中使用asyncio , 突然闷比, 没学过django,快速入门后 , 搞了一下, 发现还是可以配合使用,至于效果就不知道了 ,没并发测试过具体方法是动态添加协程;动态添加协程只是给出一个思路:就只放视图函数了, 路由那些自己随意配把;下面代码中用了aiomysqlfrom django.http import HttpReques...原创 2019-07-26 04:10:52 · 3747 阅读 · 1 评论 -
查找最大 最小的X个元素
使用堆排序:import heapqnums = [1000,-1,22,3,55,6666,1,2,3,4];datas = [{'name':'1','age':1},{'name':'2','age':2},{'name':'3','age':3}]print( "largest:",heapq.nlargest(2,nums))print("smallest:" , ...原创 2018-11-20 22:00:48 · 190 阅读 · 0 评论 -
yield from实现
以下代码仅仅是简单的实现,实际yield from 还需要处理其他各种异常问题def yield_from_instance(gen): ''' yield from 直到 gen 生成器抛出异常才继续获取调用权 ''' result = None _iter = None #迭代器 _yield_value = None...原创 2018-11-15 00:55:04 · 308 阅读 · 0 评论 -
contextmanager 让你懒惰
with open('xxx','r') as fd 这类代码应该很多吧.能让上下文环境块 执行的理由是 open 返回的对象实现了 __enter__ 与 __exit__这一行代码即调用了 __enter__ , 等待离开 with 时 , __exit__ 被调用. contextmanager 装饰器 , 可以不用自己写一个类 就能实现 with 环境块.co...原创 2018-11-08 23:29:14 · 322 阅读 · 0 评论 -
yield from 生成器 协程
首先,先理解一个概念, 把yield 当作是一种流程控制工具.1 . yield 将在产出值后 停止. 例如: yield 1 . 当 1 产出后,此生成器将停止运行,将控制权交给调用者. yield 同时可以获取值, 如果调用方 send();2. yield from 如果在函数中, 则此函数也是一个生成器, 与 yield 一样, 终止是也会抛出StopIterati...原创 2018-11-15 01:55:05 · 305 阅读 · 0 评论 -
生成器应用 ,越懒越优秀
生成器基础:python 生成器基础下面的生成器例子都在类中实现.一个可迭代的对象, 一般来说有__iter__ 或者 __getitem__ ,后者的优先级低.要先搞清楚 可迭代对象 (__iter__)与迭代器 (__next__ ) 的区别, 实现了 __iter__ 是一个可迭代对象, 实现了 __next__ 是一个迭代器具体在下面例子中有注释impor...原创 2018-11-08 21:28:49 · 147 阅读 · 0 评论 -
lru_cache singledispatch 2个标准库的装饰器
lru_cache : 缓冲装饰器, 实际上自己可以用dict 来实现 .singledispatch : 相当于 c++ 中 stl 的函数特化(具体实例化) . 如果有兴趣学c++ stl ,这里是我写的函数模版 : 函数模版 特化 模版指针 以及 类模版 具体化 特化 部分特化 友元 一个例子说明 lru_cache:#一个普通装饰器def clo...原创 2018-11-05 23:33:09 · 211 阅读 · 0 评论 -
用pygal分析一些github项目
访问github速度慢的修改hosts:151.101.72.133 assets-cdn.github.com151.101.229.194 github.global.ssl.fastly.netimport json,sys,os,time,aiohttp,asynciofrom pygal_maps_world.i18n import COUNTRIESimport py...原创 2018-07-25 17:47:09 · 185 阅读 · 0 评论 -
pygal 绘制地图
一个简单的绘制图片模块其中的 人口数据 可以去http://data.okfn.org 下载 import json,sys,os,timefrom pygal_maps_world.i18n import COUNTRIESimport pygal#国家名称对应的国家码maps = {name:code for code, name in COUNTRIES.items(...原创 2018-07-25 15:22:32 · 1204 阅读 · 0 评论 -
pillow 验证码
随手写了个.好丑import sys,osfrom PIL import ImageColorfrom PIL import Imagefrom PIL import ImageFontfrom PIL import ImageDrawfrom PIL import ImageFilterfrom random import randintimport randomrand_...原创 2018-07-19 23:41:10 · 361 阅读 · 0 评论 -
python Queue简介 task_done join
!!!Queue是线程安全的自己import queueq = queue.Queue()""" Queue 模块中的 task_done , join 不太常用. 一个例子解决; 这个例子将阻塞 task_done : 用于 get 的后续调用.告诉队列任务处理完成.当然你也可以不调用get join: 阻塞操作,直到队列所有的任务都处理. ...原创 2018-07-06 21:32:14 · 4084 阅读 · 0 评论 -
python 多进程 multiprocessing 简介
multiprocessing 的接口跟threading 类似; 在windows中运行 加上: if __name__ == '__main__':下面的例子使用继承的方式就不写了,与threading一样,重写run;import time,queue,threading,multiprocessing,osdef get_process(): ...原创 2018-07-06 21:15:35 · 3496 阅读 · 0 评论 -
python 多线程与asyncio下载文件
下面使用了concurrent.future :并发入门例子中的ThreadPoolExecutor可以改成ProcessPoolExecutor 试试看,接口统一另外ProcessPoolExecutor的参数默认值:os.cpu_count()map , submit, as_completed的参数及返回.参考文档分别使用了map 以及 submit 和 as_...原创 2018-07-06 16:02:02 · 3935 阅读 · 0 评论 -
run_in_executor
原型 :awaitable loop.run_in_executor(executor, func, *args) 参数 : executor 可以是 ThreadPoolExecutor / ProcessPool , 如果是None 则使用默认线程池可使用 yield from 或 await 挂起函数 作用 : 例如在异步事件循环中 写文件, 这种那么慢的操作...原创 2018-12-14 16:47:33 · 7818 阅读 · 0 评论 -
numpy axis
用numpy的时候常常看到axis ,就是维度比较麻烦的就是 axis = 0. 这种方式. 将打乱原有子数组的顺序一个排序功能解决问题:data = np.array([[6,5],[2,4],[3,1]])print(data)print("sort:")//默认排序. 只排序每个数组中的元素print(np.sort(data))print("sort axis ...原创 2019-01-21 01:11:17 · 492 阅读 · 0 评论 -
numpy argmax 随机漫步
argmax 获取最大的索引值;data = np.array([1,3,1,3,2,4,2])print(data.argmax(0)) //获取最大索引#先获取一个只有0,1的数组, 大小(5,4) 可自行调整arr = np.random.randint(0,2,(5,4))#把 > 0 的用1代替, 否则用-1 代替 : 1 if arr > 0 ...原创 2019-01-21 02:59:29 · 442 阅读 · 0 评论 -
numpy pil 4行代码修改图片颜色 倒置 马赛克
群里的人问怎么改图片颜色.numpy + PIL 实现;主要还是用了numpy中的切片, 和指定元素顺序功能比如:kk =[[[1,2,3],[4,5,6]],[[10,9,8],[7,8,9]]]d = np.array(kk)print(d)print("-" * 10)print(d[:,:,[2,0,1]]) #[2,0,1] -> 把原来的0,1,2 换个...原创 2019-07-30 18:38:02 · 803 阅读 · 0 评论 -
生成器和Future对象类似的地方与yield from
下面所有的代码只为了说明asyncio.Future , 至于为什么要写这玩意,主要是针对tornado 中的yield .tornado中现在 tornado.gen.coroutine 中全部使用的asyncio.Future.算了,我喝醉了,一瓶白酒下肚,在车上瞎写, 下面的东西都在瞎搞.先通过代码说明生成器的演变, 再说明gen 与 Future对象类似的地方;如...原创 2019-04-13 22:26:52 · 163 阅读 · 0 评论 -
关于aiohttp下载大文件的方式
这里给出一个例子.可自由发挥.也可以直接使用aiofiles , 其实跟下面执行的代码差不多的. aiofiles 也是用线程池解决问题#写入文件的函数. 用线程池解决def save_file(fd , data): fd.write(data)async def fetch_files(session:aiohttp.ClientSession,url:str...原创 2019-03-27 15:01:02 · 3401 阅读 · 1 评论 -
aiohttp爬虫
一个简单的异步爬虫.私信太多,统一回答一下:关于异步函数的:1. 真正派发任务的是 consumer 这个coroutine,所以也在内部做了并发控制.2. process_content 用于获取html及保存到mysql.关于异步相关(asyncio)的 :1.await 相当于 yield from .2.await 后面是一个coroutine, ...原创 2019-03-25 17:44:39 · 987 阅读 · 0 评论 -
twisted 以及相关源码
官方文档不怎么友好..哈哈哈自己写了个总体按照:https://twistedmatrix.com/documents/current/core/howto/servers.html来写twisted总体就是一个循环. 下面我会按照 socket编程 的习惯来说明第一个例子: 里面有2个类说简单说明一下:1. Protocol 类, 内部封装了一个 transport ...原创 2019-02-26 02:51:52 · 791 阅读 · 0 评论 -
scrapy 异常处理
可以在下载中间件直接处理 404 503 等等异常settings.pyDOWNLOADER_MIDDLEWARES = { #定义成200 . 让其他默认中间件先处理 'test_scrapy.middlewares.ProcessAllException': 200, }from scrapy.http import HtmlResponsefrom ...原创 2019-02-24 22:59:09 · 2076 阅读 · 0 评论 -
gevent 异步读取文件
gevent.monkey.patch_all() 并不会patch io.buffer (既 open)用gevent.fileobject.FileObjectThread 来包装 open 返回的文件对象; import geventimport gevent.monkey; gevent.monkey.patch_all()from gevent.fileobject ...原创 2019-02-24 14:59:15 · 1028 阅读 · 0 评论 -
过滤代理 爬虫代理 Max retries exceeded with URL
Max retries exceeded with URL : 主要是连接太多没关闭.sess = requests.session()sess.keep_alive = False也可以自定义配置POOLSIZE :#作用于全局requests.adapters.DEFAULT_RETRIES = 2 requests.adapters.DEFAULT_POOLSIZE...原创 2019-01-30 17:58:59 · 1059 阅读 · 0 评论 -
asyncio动态添加协程 关闭协程
其实简单的不得了. 弄个线程,在线程里运行一个新的事件循环. 然后调用 run_coroutine_threadsafe 即可.asyncio基础 :python 异步 asyncioasyncio.get_event_loop() 默认是主线程的事件循环 每个线程一个事件循环 , 默认情况select循环下面给出实现:mport asyncio#线程def t...原创 2019-01-30 04:54:29 · 3335 阅读 · 0 评论 -
爬虫代理池 503
用了gevent. 有些服务器限制了ip访问间隔. 并发时产生 503错误下面的代码用于抓取代理后,再次抓代理,多多少少能用吧 heads = dict()USER_AGENT_LIST = [ 'MSIE (MSIE 6.0; X11; Linux; i686) Opera 7.23', 'Opera/9.20 (Macintosh; Intel Mac O...原创 2019-01-30 04:31:15 · 796 阅读 · 0 评论 -
gevent gevent.queue gevent读取文件
gevent 一种异步的方式,基于事件循环.. 跟 asyncio 里的东西运作的差不多官方手册说的太不清楚 . 自己写了个入门教程.一个最简单的例子:spawn 将把你的函数封装成一个个协程对象 # 注意. gevent.sleep 不是 time.sleep . 下一个例子说明def fuck1(arg): print('我在这: ',fuck1.__...原创 2019-01-30 03:33:38 · 986 阅读 · 0 评论 -
scrapy Spider CrawlSpider redis 总汇以及一些源码分析
scrapy 流程图 玩scrapy 时,一直看着这张图就ok.scrapy需要的基础 : lxml ( xpath) , 关键字 yield ( 生成器) . 生成器我的博客中有很多文章.可以自己去找 . 下面先说一下scrapy的全貌:一个最简单的Spider : 基本上你用scrapy创建的跟我的差不多.class ChoutiSpider(scrapy.Spi...原创 2019-02-19 18:27:00 · 946 阅读 · 0 评论 -
python生成器 协程 yield yield from
生成器概念;生成器: 函数中有yield 或者 yield from , 或者生成器表达式(x for x in range(5)) 都会被编译成生成器.生成器内部实现了迭代协议,即__iter__ , __next__ 所以可以用于迭代.生成器不会像列表一样一次在内存中展开所有的值, 而是拿一次计算一次.生成器是一个对象, ...原创 2018-07-06 10:09:25 · 728 阅读 · 0 评论 -
python asyncio模型 事件循环
异步建立在事件循环上.简单来说事件循环: 1.把要执行的函数放入队列 2.取出函数,执行 3.看看还要不要继续放入此函数 4.继续第一步一个简单的例子说明:""" 1.yield 挂起当前函数. 2.使用调度器循环 3.使用next唤醒此函数继续执行"""def f1(): for i in rang...原创 2018-07-12 17:07:37 · 1131 阅读 · 0 评论 -
python 并发 ThreadPoolExecutor
asyncio基础asyncio协程asyncio并发下载asyncio, aiohttp爬虫 -> 这里写了一些原理和使用asyncio需要注意的东西, 对asyncio 有些基础的可以看看python asyncio aiohttp 异步下载 完整例子用 c / c++ 分别实现的简单线程池 ->对线程池实现有兴趣的可以看看正文:Executor...原创 2018-07-05 22:22:30 · 17151 阅读 · 1 评论 -
python运算符重载,魔术方法,索引,迭代,分片
1.__getitem__#__getItem__ 一种重载迭代的方式class Stepper: data = "rain over me" def __getitem__(self, item): print("__getitem__ -> item:%s "%item) return self.data[item]s = Steppe...原创 2018-06-08 22:18:02 · 846 阅读 · 0 评论 -
python类,赋值,命名空间
python中的类相当于一个命名空间,object.attr 就是一个向上爬属性的过程 属性:__dict__ , __class__ , __bases__ __dict__: 实例或类或模块的属性 , __class__ 实例对应的类对象,__bases__(元组):父类/超类爬属性:def findAttr(obj , attr): if attr in obj.__di...原创 2018-06-08 13:40:27 · 920 阅读 · 0 评论 -
元类的一些应用,实现假的元类,扩展元类
元类基础啰嗦一下:必须再次申明类(class) 是被创建出来的,由type类的__call__创建 : class x = type('x',x.__bases__,{classdict}) .如果类涉及了继承以及元类 那么 class Person(继承类 ,... metaclass = 元类);下面有一个例子是元类也能做到像装饰器一样,但需要说明的是,装饰器在执行代...原创 2018-06-22 20:49:11 · 220 阅读 · 0 评论 -
python 元类的创建过程
元类的一些应用,实现假的元类,扩展元类元类与装饰器的混合应用一切皆对象的概念.这个概念在元类中充分体现.一句话解释元类 : 创建某个class的过程中使用__new__ ,在__new__中你可随意修改此class先啰嗦一些概念:类(class)是type()创建的对象(玩c++和java可能懵比了)要自己定义元类首先明确1个概念,普通的class 虽然 由 typ...原创 2018-06-22 13:56:51 · 267 阅读 · 0 评论 -
利用装饰器添加测试代码
把需要测试的代码放进装饰器,剔除代码冗余 def rangtest(*argchecks): def decorator(func): if not __debug__: return func else: def on_call(*args,**kwargs): prin...原创 2018-06-21 23:39:34 · 153 阅读 · 0 评论 -
python代码对象,pycodeobject,__code__,命名空间
py中常常会使用到__code__ .比如闭包中的 x.__code__.co_freevars.一个__code__ 对应 一个code block.一个命名空间对应一个__code__ == code block,即模块,类,函数 都自己的__code__.def f1(a,b,c,*d, e,f): localvar = 1 x = '123'print('co_argc...原创 2018-06-21 20:58:09 · 2561 阅读 · 0 评论 -
描述符实现Property
class Property(): str_noinstance = "无实例" str_nomethod = "未定义获取方法" def __init__(self,fget = None, fset = None, fdel = None,doc = None): self.fget = fget self.fset = fset ...原创 2018-06-13 22:38:59 · 198 阅读 · 0 评论 -
python描述符一句话解释, 简介与坑
一句话解释: 描述符是一个用于维护单一属性的类描述符2个部分: 1.描述符介绍2.描述符实际应用描述符是一个独立的类.特性(property,在另一篇文章中已经介绍并讲解2种方式)是描述符的一种.描述符用于对属性的拦截 (获取/修改(设置)/ 删除)具体来说,描述符的作用在于, 对某个特定的属性在获取/删除/设置 方面拦截了一下,给与用户自己来定义的一个过程切记切记,描述符实例是用于赋给一个类属性...原创 2018-06-13 15:17:22 · 523 阅读 · 0 评论 -
property简介
#property简介#1.用于赋值,修改,删除, 当然如果觉得property麻烦完全可以不用#2.property(特性) 是类属性, 因此可以被继承#Person中定义了4个简单的函数class Person: def __init__(self,name): self._name = name def getName(self): p...原创 2018-06-12 22:37:11 · 726 阅读 · 0 评论