- 博客(15)
- 收藏
- 关注
原创 Python高级编程相关知识
一切皆对象所有对象都是type对象的实例,type本身也是,还有就是type和object之间是鸡与蛋的关系print(type(list)) # >>> typeprint(type(type)) # >>> typeprint(type(object)) # >>> typeprint(type.__bases__) # >> object常见的内置类型内置类型的三大特征:id,type,valueNo
2020-08-20 20:56:13 1167
原创 Python中的继承顺序
继承的方式通过类名通过super()通过super(类名) :其实和第二种是一样的,不写就是默认的,默认就是此类的类名通过类名调用的时候,他的继承关系就比较明朗,调用的就是具体类的方法或者属性,但是在菱形结构中会出现重复调用的问题如果是通过super调用,它不一定会直接到父类中调用,而是通过C3算法计算得到一个元组,查找super类名在元组中的位置,然后调用它后面的类的方法C3算法比较复杂,他可以保证在多继承调用时,每个类的方法不会被重复的调用。可以通过类名.mro()查看当前类的继承调
2020-08-07 16:31:30 393
原创 Scrapy框架学习之路
安装scrapy框架pip install scrapypip install pypiwin32快速入门Spider:根据start_urls列表,自动调用start_requests()方法,想目标网站发送请求,默认是以parse作为回调函数,所以在类中有个parse函数让我们编写CrawlSpider:根据start_urls列表,发送请求;然后在rules里的规则进行过滤得到有效的连接在发送请求,各自有各自的回调函数进行处理官方的案例class AuthorSpider(scra
2020-07-28 20:41:41 694
原创 分布式锁的见解
实现分布式锁可以利用公共组件Redisredis的setnx:设置key value 当且仅当key不存在,设置成功返回1,失败返回0最简单得就是获取在redis上获取一个key,然后根据返回结果处理逻辑# 伪代码ret = redis.setnx(key,value)if ret: stock = redis.get('stock') # 100 if stock > 0: stock -= 1 else: return Respo
2020-07-22 23:38:15 188
原创 python多线程-多进程
多线程线程的创建from threading import Threadimport ost = Thread(target=os.getcwd,name='thread_1')t.start()多线程的创建from threading import Threadimport osif __name__ == "__main__": threads_list = [] for i in range(5): t = Thread(target=p
2020-07-14 22:54:46 98
原创 软件工程设计模式-Python实现
工厂方法模式工厂方法:一个抽象产品类派生出多个具体产品类;一个抽象工厂类派生出多个具体工厂类;每个具体工厂类只能创建一个具体产品类的实例。
2020-07-04 16:04:14 441
原创 对HTTP的Keep-Alive和TCP的KeepAlive的一点片面的理解
HTTP的Keep-Alive因为HTTP是以请求-响应来工作,所以在设计之初每次请求都要经过三次握手建立TCP连接,每次完成后都会在断开连接,主动释放连接的一方还要等待TIME_WAIT。为了改善这种方式出现了keep-alive,它是头部的一个字段,它的作用就是在某段时间内、规定数量内可以复用TCP连接,从而让世界变得更美好。目的:多个Http请求复用TCP连接TCP的KeepAlive在TCP连接中,如果一方没有发送断开连接的请求,然后宕机了,另一方是感觉不到了,如果一直保持连接就会
2020-06-23 18:15:15 234
原创 Django ORM select_related和prefetch_related的区别和使用
首选明确一点,这两个都是发生在表连接中,为了避免不必要的数据查询而存在创建模型类from django.db import modelsclass Publisher(models.Model): name = models.CharField(max_length=300) def __str__(self): return self.nameclass Book(models.Model): name = models.CharField(max_l
2020-06-12 10:03:56 1145
原创 Django框架知识点
Shell生成迁移文件python manager.py makegigrations <appname>执行迁移python manager.py migrate反向迁移python manager.py inspectdb <appname>ForeignKey属性db_constraint:当设置为False时,数据库中不存在连接,可以通过ER图看。on_delete:可选字段:models.CASCADE:级联删除models.SET_NULL:设置为
2020-06-10 15:39:00 271
原创 Redis小知识点
主从配置bind作用:bind是绑定本地的一个网卡,只有来自这个网卡的请求才会处理,否则拒接连接。主:redis.configbind :ip 本机ipport:6379 默认端口redis-server config从:可以有多个,从还可以有从salve.configbind :ip 本机ip,可以和从不属于同一机器port :6378 如果是同一机器就必须更改端口slaveof :47。100.179.209 6379 配置主的ip和端口号集群配置最少是3个,可
2020-06-10 13:05:49 148
原创 django-rest-framework相关知识点
Restful规范协议尽量使用HTTPs协议域名两种方式:https://api.example.com要解决跨域问题,jsonp,cros,nginx代理https://example.org/api常用的方式版本应该将api的版本号放在url中,方便迭代。面向资源,网络上全是资源所以url中不能有动词method:http动词–get–post–put–patch–delete对应了查,增,改,小改,删。还有不常用的head(获取资源的元数据)和op
2020-06-09 21:59:08 342
原创 Celery实现异步任务和定时任务
概念Celery:是一个分布式队列的管理工具。提供了管理简便的接口管理任务队列结构生产者 user: 发布任务任务队列 broker: 存储任务,常见的有redis,rabbitMQ职程(工作者) worker: 处理任务结果 backend 存储结果使用首先需要一个redis服务器用来做消息队列和存储任务的结果,这个redis可以在本地,也可以在远程,他可能是一个redis服务,也可能是redis集群。sudo apt-get install redisvim /e
2020-06-08 15:10:29 717 1
转载 Python协程-异步编程
使用python协程实现异步编程协程的作用由于Python全局解释器锁的原因,Python多线程效率不高,同一时刻只运行一个线程,但是在I/O操作不用CPU的操作频繁时,可以节省时间。协程的作用就是在遇到I/O阻塞时,去执行其他协程任务,也可以充分的利用CPU的资源,相比线程,还减少了上下文切换的开销。CPU密集型任务应该使用多进程,多进程配合协程==起飞~python3.4中加入了asyncio,然后可以通过asyncio.coroutine装饰器实现协程;python3.5中引入了as
2020-05-31 20:35:42 1764
原创 Python DRF 面试前知识点总结
数据结构和算法常见的数据结构: 数组,队列,栈,链表,堆,树,哈希表队列先进先出;Queue单项队列(from queue import Queue),deque 双向队列(from collections import deque)栈:后进先出;基本方法:push,pop,gettop,is_empty,size链表:经常使用两个指针来解决问题堆:常用来找到最大值或者最小值(构建大顶堆或者小顶堆);堆排序树:二叉树:度的最大值为2,完全二叉树:最下一层有右子树就必须有左子树,叶子节点只能出
2020-05-27 08:19:00 1236 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人