
python
lucky404
hello world
展开
-
nginx + uwsgi部署django 应用
python web app 部署比如 flask 一般都会和 Gunicorn 一起配合,和django 一般都会和 uwsgi 一起,有人可能要问了,直接使用nginx 反向代理到django 或者flask 不就行了吗,为什么还需要nginx,或者是直接使用uwsgi+django,flask + Gunicorn 直接部署不行吗,为啥还要nginxpython web部署 为什么需要uw...原创 2020-01-11 14:09:10 · 326 阅读 · 0 评论 -
python dict 源码解析
python字典源码(https://github.com/python/cpython/blob/master/Objects/dictobject.c, https://github.com/python/cpython/blob/master/Include/dictobject.h) 哈希表和哈希冲突概念python的字典是一种哈希表,是根据关键码值(Key value)而直...原创 2018-03-18 23:25:23 · 4605 阅读 · 0 评论 -
Python线程安全的单例模式
单例模式是指,该对象创建后,在其生命周期内内存中始终只有一个对象, 如果被再次调用时,还是返回该对象。 这样做的好处是,可以节约内存,缺点是不可以根据不同的应用场景创建不同的对象。多线程环境下,由于单例模式总是会去判断 实例是否被创建,但是多个线程有可能会拿到相同的结果,这样就无法实现单例模式了,因此遇到多线程的环境时,需要加锁。多线程单例模式:# coding:utf-8impo...原创 2018-03-23 15:24:19 · 7758 阅读 · 1 评论 -
python装饰器原理
装饰器在python里面使用非常广泛,常用的应用场景,比如可以使用装饰器来做拦截器,或者是在执行某个函数之前,执行另外一个函数,执行完毕之后在执行其他函数,使用装饰器就可以很优雅的解决这种需求。 下面通过例子向你阐述装饰器是如何工作的假如你定义一个函数,def foo(): print 'foo'python的解释器,去执行这个文件假如你这个python文件叫做t...原创 2018-03-29 20:26:07 · 1627 阅读 · 0 评论 -
python 源码解析 object 定义的介绍
在python的世界中一切皆对象,所有的子类都是继承自同一个父类,object 那object 到底是什么呢?来看源码定义typedef struct _object { _PyObject_HEAD_EXTRA Py_ssize_t ob_refcnt; struct _typeobject *ob_type;} PyObject;这个object ...原创 2018-03-24 11:43:38 · 2810 阅读 · 0 评论 -
python 对象缓冲池
python 的内置数据类型,数值型,字符串,列表,字典等都会有自己的对象缓存池, 这样做的好处是,避免了频繁的申请内存,释放内存,这样会极大的降低应用程序的运行速度,还会造成大量的内存碎片。因此提供对象缓存机制是非常重要的。 以int 类型为例介绍python 对象缓存池python 定义的数值缓存范围是 -5 ~ 257 源码定义如下:class int "PyObj...原创 2018-03-24 13:45:09 · 1954 阅读 · 0 评论 -
flask 源码浅析(flask 如何处理请求(多线程,多进程,IO多路复用))
之前有阅读过tornado 底层的实现,tornado 为了解决C10K 问题(没听说过C10K问题的请查看: http://www.360doc.com/content/13/0522/18/1542811_287328391.shtml),在Linux 平台下是使用了epoll(python2.6 开始支持epoll),unix 平台下 tornado 使用了kque , 由于flask 之前...原创 2018-04-04 13:09:47 · 12063 阅读 · 1 评论 -
python webscoket(Autobahn)的使用
自从18年4月份入职游戏公司之后很少有时间写博客了! 今天来聊聊python的websocket的使用,在游戏行业游戏客户端和服务端需要大量的,快速的通讯,这里面就会用到websocket Autobahn 是一个高性能的websocket 它采用了两种实现方案 1 基于Twisted 2 基于asyncioAutobahn 有如下的特点:framework...原创 2018-05-25 12:33:43 · 6752 阅读 · 7 评论 -
python 实现单链表
golang版本:https://blog.youkuaiyun.com/lucky404/article/details/90716410""" 使用python实现单链表 add 操作:在链表首部添加 append 操作:在链表尾部添加,从头部找到最后一个元素,把最后一个元素指针指向需要添加的元素 insert 操作:在指定位置添加,往中间插入元素,需要调整插入该位置的元素之前的指针,还有该元...原创 2019-05-31 16:02:12 · 204 阅读 · 0 评论 -
python实现栈,队列
栈(LIFO)class Stack(object): """ 使用 python 实现栈 栈是一种LIFO(Last In First Out) 的数据结构,可以封装一个list实现 """ def __init__(self): self.__stack = list() def push(self, value): ...原创 2019-06-02 13:59:07 · 754 阅读 · 0 评论 -
python实现双向链表
双向链表的定义数据节点包含两个指针,一个指向前一个元素,一个指向后一个元素,因此需要定义一个双链表的数据结构完整代码如下:# 数据结构定义class Node: """ 双向链表,每个节点除了指向下一个元素之外,还需要指向前一个元素 1---->2<=====>3<====>4---->None """ def ...原创 2019-06-03 13:58:29 · 261 阅读 · 0 评论 -
python 实现二叉树(有序)的遍历
前序遍历 前序遍历主要是顺序是 根 -----> 左子树 -----> 右子树中序遍历 中序遍历的主要顺序是 左子树 -----> 根 -----> 右子树后序遍历后序遍历的主要顺序是 左子树 -----> 右子树 -----> 根class Node(object): def __init__(self, data):...原创 2019-06-16 23:22:18 · 528 阅读 · 0 评论 -
python 快排
def quick(lst, start, end): """ 快速排序 复杂度 N * (logN) 原理为有两个指针:low, high 分别指向列表的第一个元素,和列表最后一个元素,和一个中间值 mid(就是取列表的第一个元素) 一开始 low 默认情况下就指向了mid, high 指向列表最后一个元素 [8, 3, 15, 7, 6, 2] ...原创 2019-06-21 13:47:57 · 1458 阅读 · 1 评论 -
Python 列表源码解析
列表作为python 最常用的一种数据类型, 一直很好奇其是如何实现动态的扩展的,于是上github看了源代码(https://github.com/python/cpython/blob/master/Include/listobject.h, https://github.com/python/cpython/blob/master/Objects/listobject.c),结合《pytho...原创 2018-03-17 22:06:42 · 8354 阅读 · 2 评论 -
django 中间件如何调用
我们可以自定义的编写属于自己的中间件。也就是需要编写一个类,然后里面定义4个方法 process_request(self, request), process_view(self, request, callback_args, callback_kwargs), process_exception(self, request, exception), process_response(se...原创 2018-03-03 15:41:10 · 912 阅读 · 0 评论 -
django 跨站请求伪造(csrf)
django的跨站请求伪造的中间件是在配置文件settings.py里面配置的。 如下图的红色部分就是。已经被我注释掉了(现在我将会把它启用)这个中间件的作用是,当被认为某个用户不是自己网站的用户给网站post数据的时候,就会被服务器端禁止掉。为了就是防止那些用户从来没有访问过网站的,直接给网站post数据。要想解决这个问题就是给是属于这个网站的用户加一个标识。不是网站用户的,就不加标识...原创 2018-03-03 15:36:32 · 268 阅读 · 0 评论 -
Python RabbitMQ
python pika 模块主要是用于实现消息队列的,想要使用pika,就必须先要了解一下 rabbitmq 其中mq(代表Message Queue 也就是消息队列)。是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们。MQ是消费-生产者模型的一个典型的代表,一端往消息队列中不断写入消息,而另一端则可以读取或者订阅队列...原创 2018-02-28 15:46:09 · 427 阅读 · 0 评论 -
Python正则表达式
需要掌握的 正则表达式方法: 1 match() 2 search() 3 findall() 4 group() 5 groups() 6 compile()python有专门用于正则表达式的模块叫re python正则表达式的用法: 首先写出你需要匹配的模式 pattern=re.compile(r’hello’) r...原创 2018-02-28 16:31:13 · 129 阅读 · 0 评论 -
python cmd 模块
python cmd模块是一个简易的命令行解析框架,我们可以创建简易的命令行解释器。 只需要创建一个类,并继承cmd.Cmd。然后就可以在下面写一些方法。你写的方法越多也就是你的解析的框架能解析的越多 cmd模块常用方法: Cmd.cmdloop() 这个方法可以让我们的命令行不会退出一直循环。 emptyline() 这个方法是继承自cmd需要,你的类里面重写的方法当命令行...原创 2018-02-28 16:35:24 · 3669 阅读 · 0 评论 -
Python 连接postgresql
使用psycopg2 连接 postgresql try: conn = postgre.connect(host="192.168.1.213", port=5432, dbname=post, user=pg, password=pg) print conn except Exception as e...原创 2018-02-28 16:42:57 · 2524 阅读 · 0 评论 -
解决 安装 leveldb 报错 gcc error trying to exec 'cc1plus' execvp No such file
leveldb 是一个 K-V的内存数据库,我在linux 平台下安装版本是leveldb-0.194 下载地址: https://pypi.python.org/pypi/leveldb 使用 python setup.py install 安装时候 报错 gcc: error trying to exec ‘cc1plus’: execvp: No such file or...原创 2018-02-28 16:50:50 · 907 阅读 · 0 评论 -
linux 平台下两个版本python,以及pip 共存
Linux下如果是红帽6系列或者是centos6系列。平台上面的python一般都是2.6版本的,比较老旧 如果想安装其他版本的python,安装过程其实是简单的,但是pip共存问题就需要考虑了。如果你的Linux平台的python是2.6,并且你已经安装了pip,此时你再安装2.7版本的python。 如果你还是使用pip install xx 这种形式来安装模块,那么这样是会...原创 2018-02-28 16:55:40 · 2880 阅读 · 0 评论 -
python BeautifulSoup 获取豆瓣当前热映电影以及评分
使用urllib + Bs4#!/usr/bin/env python# _*_ coding:utf-8 _*_import urllib2from bs4 import BeautifulSoupdef agent(): # 构造http 请求头 headers = { 'HOST': 'movie.douban.com', ...原创 2018-03-03 14:24:56 · 1301 阅读 · 0 评论 -
python pytesser 进行简单的验证码识别
pytesser 是谷歌开源的一个项目,可以用来进行图片中文字的识别这里我们将使用它来进行简单的验证码识别。 代码如下:#!/usr/bin/env python# -*- coding:utf-8 -*-__author__ = 'admin'from pytesser import *flag = 140table = []for i in range(256): ...原创 2018-03-03 14:40:43 · 240 阅读 · 0 评论 -
python 发送QQ 邮件
使用python smtplib进行发送qq 邮件 使用之前先要设置好QQ 邮箱的 POP3/SMTP服务 和 IMAP/SMTP服务 服务, 设置为开启设置方法如下: 1 首先进入QQ 邮箱 设置 2 点击账户 往下拉 找到 POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务 开启设置 3 开启之后 会得到授权码 在编写...原创 2018-03-03 14:57:23 · 551 阅读 · 0 评论 -
django 常用命令行
新建项目:python django-admin.py startproject project-name注意 有时候不同的版本可能稍微有点不一样,例如1.8以上的新建项目就是 python django-admin startproject project-name #与之前不同就是admin后面少了.py 新建apppython django-adm...原创 2018-03-03 15:04:35 · 582 阅读 · 0 评论 -
django模型的连表查询
在数据库当中,可以通过设置外键的方式将两个表进行连接,如果需要查询数据的时候就需要进行连表查询。例如:假如我现在有两张表。userinfo 和 usertype,userinfo里面记录了用户的信息,usertype表里面记录了用户的角色。 两个表是通过外键进行关联。usertype modelclass usertype(models.Model): name = ...原创 2018-03-03 15:19:46 · 17283 阅读 · 0 评论 -
django post提交表单数据出现403错误解决
我定义了一个表单,往后台提交数据,提交地址为:http://127.0.0.1:8000/data/提交方法为post,出现错误解决办法是:在视图文件views.py里面使用@csrf_exempt或者在setting.py里面注释掉CSRF那一行 出现这个错误的原因主要是,跨站请求伪造。 简单来说就是,django框架为我们提供了一个中间件,用于处理跨站请求伪造的,假如某...原创 2018-03-03 15:29:16 · 2918 阅读 · 0 评论 -
Python 队列(Queue) Demo
Python的多线程有个队列模块Queue 这个模块就相当于创建一个线程池。举一个例子说明。一下这个Queue,比如我每天都去的吃的乔晨粗粮包子店。假如这个包子店的锅炉一次只能蒸100个包子,那就意味着面点师傅只要做满了100个就没办法做了,等着消费者来将里面消费到一定程度之后重新开始做。 运用到Python就是这个Queue就是那个锅炉,容器。将线程生产出来的数据放到这个容器当...原创 2018-02-28 15:34:49 · 1361 阅读 · 0 评论