
python
疯琴
这个作者很懒,什么都没留下…
展开
-
CI/CD:使用 Jenkins 的 Pipeline 测试 python 程序并制作 docker 镜像
上文书实践了 Jendkins 的 freestyle 项目,这次使用 pipeline 进行测试和构建打包加入自动单元测试启动 Jenkins 的 docker 以后,freestyle 是通过执行 shell 命令来逐步实现测试、构建和打包的,shell 命令是在 Jenkins 的 docker 容器内执行的,如果要将应用打成 docker 镜像,需要将宿主机的 docker 命令和 s...原创 2020-01-25 11:32:07 · 1006 阅读 · 0 评论 -
CI/CD:用 Jenkins 通过 Git Push 触发自动制作 Flask 项目的 Docker 镜像
Flask 项目文件$ tree flask_docker_jenkins_demo/flask_docker_jenkins_demo/├── Dockerfile├── README.md└── app.pyapp.pyfrom flask import Flask, jsonifyapp = Flask(__name__)@app.route('/')def he...原创 2020-01-23 15:40:40 · 593 阅读 · 0 评论 -
792. Number of Matching Subsequences
最近开始同时使用python和go做题,go的效率高很多,用python brute force的方法提交以后TLE,同样的方法用go可以AC,用python可以榨取更快的算法。题目给定一个字符串S和一个单词列表words,找到words里所有S的子串。Example :Input:S = “abcde”words = [“a”, “bb”, “acd”, “ace”]Outpu...原创 2019-01-06 09:33:14 · 243 阅读 · 0 评论 -
在django 2的views中使用原生celery 4和redis执行异步方法
软件版本Celery从3.1版本以后不需要用单独的库来支持django了,可以像单独使用celery的api那样在django中使用原生celery。软件版本如下python 3.6.6Django 2.1.4 celery 4.2.1redis 4.0.10使用方法我参考了celery的官方文档,因为使用了python3,所以删...原创 2018-12-18 10:08:16 · 1278 阅读 · 0 评论 -
leetcode 37. Sudoku Solver 数独
思路这是第一个自己解出来的Hard。用N皇后的递归思路,扫每一个空格,遍历1-9看可以放哪个数字,如果都不能放就清理现场回到上一层递归继续遍历。后来参考别人的思路,模拟人解题,先找出每个位置可以填的候选数,按照可填候选数的数目排序,从最少的开始填,这样剪枝掉一些不必要的计算。代码class Solution: def isValidPosition(self, n, row, col...原创 2018-12-09 16:26:34 · 181 阅读 · 0 评论 -
Python web框架对比:Flask VS Django
flask今年发布了1.0版本,django却刚刚曝出面临发展困境。最近做了一些web开发,对二者有一点体会。以前两个框架都用过,开发起来挺相似的,都是mvc框架。flask轻便灵活,django完善丰富但是重,大家都这么说。flask适合小应用,很快就能跑起来。最近做了几个小应用,很顺手。刚刚开始做一个大一点的项目,需要一个用户管理功能,要保护url路由权限,当然是用框架里面开箱即用的功能。...原创 2018-12-07 16:34:32 · 1150 阅读 · 0 评论 -
leetcode 79. Word Search
思路DFS,由于有比较变态的测试用例,所以要特别注意剪枝,一旦搜到结果之后,在返回的时候尽快往递归和循环外面跳。注意代码里注释的地方,都是能加速的地方。代码class Solution: def exist(self, board, word): """ :type board: List[List[str]] :type word: ...原创 2018-12-13 09:29:32 · 154 阅读 · 0 评论 -
在django admin中添加自定义视图
django admin提供了完善的用户管理和数据模型管理,方便实用。研究了一下在admin里面添加自己的页面。在admin.py里继承django.contrib.admin.ModelAdmin基类class FaceAdmin(admin.ModelAdmin):然后在里面写自己的视图处理函数。基类里面的save_model和delete_model函数可以做数据对象的新建和删除的预...原创 2018-12-07 17:30:56 · 5642 阅读 · 0 评论 -
leetcode 22. Generate Parentheses
题目给定n对括号, 写一个函数生成所有正确组合形式的括号对。思路数学归纳法递归,n==1时是[’()’],然后针对1以后的第n层,就是将n-1层的每一个元素的每一个位置加一对括号生成一个新元素,这些元素加起来构成第n层的结果。代码class Solution: def generateParenthesis(self, n): """ :type ...原创 2018-12-01 21:51:19 · 169 阅读 · 0 评论 -
django 单元测试 1067, Invalid default value for exist_info
django做单元测试时报错:python manage.py testdjango.db.utils.InternalError: (1067, “Invalid default value for ‘exist_info’”)百度找了一个错误处理:https://www.smwenku.com/a/5b7cde062b71770a43dcef8e我的数据库之前有张表有exist_...原创 2019-02-18 10:10:24 · 1711 阅读 · 0 评论 -
Python Eventlet 使用协程和requests库遇到的问题及解决方法
之前用greenevent携程并发下载web内容,很方便,速度快。最近学习eventlet,还想结合requests并发下载web,各种尝试,遇到一些问题。第一个官方示例Eventlet官方文档的第一个示例:import eventletfrom eventlet.green import urllib2urls = ["http://www.google.com/intl/en_...原创 2019-04-12 22:02:55 · 3400 阅读 · 2 评论 -
LeetCode23 猴子补丁
本题并不难,但是使用heapq遇到一个问题,python3中如果类没有实现__lt__方法就不能进行比较,所以如果没有等号之间那段代码的话会报错TypeError: '<' not supported between instances of 'ListNode' and 'ListNode',leetcode的ListNode类已经固定了,不能在上面直接加方法,于是打个猴子补丁搞定。# ...原创 2019-04-19 15:42:08 · 335 阅读 · 0 评论 -
django rest framework 批量删除
使用ModelViewSet可以自动生成删除单个资源的方法,删除的url是/resource_name/pk/。如果想要批量删除可以写继承APIView的类,自定义delete方法,如果使用ModelViewSet的话可以在类里面写一个批量删除的函数:from rest_framework.decorators import actionclass UserViewSet(viewsets....原创 2019-05-06 14:38:50 · 3539 阅读 · 0 评论 -
django rest framework 自定义ModelViewSet的返回内容
django rest framework的ModelViewSet非常爽,省了一大堆业务逻辑代码,跟自己手写restful的API 比至少减了100多行代码,而且serializer这种东西都是复制就行,少耗费好多脑细泡。create和update的时候的各种异常根本不用自己检查,直接就能报出来,加上django的国际化功能,直接甩中文,贼轻松,类似这样:{ "name": [ ...原创 2019-05-09 11:46:50 · 7582 阅读 · 0 评论 -
django vs flask 负载性能测试对比,谁更快(一)GET简单json
先上结果:完整的django初始框架,开发服务器:390 rps单文件django,开发服务器: 406 rps单文件flask,开发服务器:423 rps完整的django初始框架,gunicorn: 462rps单文件面django,gunicorn:482 rps单文件flask,gunicorn:479 rps完整的django初始框架+rest_frameword,gun...原创 2019-05-15 12:56:21 · 3645 阅读 · 0 评论 -
django vs flask 负载性能测试对比,谁更快(二)读数据库
上文书对比了二者简单GET json的性能网上有篇16年的对比文章说django ORM性能要比flask sqlalchemy差,我简单对比了一下读数据库的效率。环境说明flask 1.0.2,Flask-SQLAlchemy 2.4.0, SQLAlchemy 1.3.3,一个app文件,在wsl里gunicorn启动一个workerdjango 2.2.1,sqlparse 0.3...原创 2019-05-15 15:11:53 · 2562 阅读 · 0 评论 -
django rest framework 登录认证授权 jwt
需求认证:登录状态保持30分钟,记录登录日志授权:根据不同的视图集和http方法授权不同的用户组访问初始方法起初写了一个基于token的认证授权方式,建一张token表,有创建时间和更新时间两个字段,和user是many to many关系,这样可以保存登录记录,登录的时候如果通过用户名密码的验证就查一下token表该用户的上一次更新时间,如果相差小于30分钟就不生成新的token...原创 2019-05-16 16:25:13 · 5510 阅读 · 5 评论 -
django rest framework 自定义分页
上回书说到自定义返回内容,通过继承viewsets.ModelViewSet实现,这里面有个问题,在list函数,也就是返回结果列表这个功能里,如果用到了分页,就需要额外的调整来实现自定义返回内容了。 def list(self, request, *args, **kwargs): queryset = self.filter_queryset(self.get_quer...原创 2019-05-13 09:37:54 · 1106 阅读 · 0 评论 -
用于人脸识别的深度学习容器环境:docker+cuda+python3.6+opencv+dlib+keras
Nvidia容器运行时Nvidia容器运行时支持GPU,可以方便的构建和部署容器化的使用GPU加速的应用程序,就是在docker引擎外面包裹了一层,可以在docker里支持GPU的驱动。安装跟着官网的说明就可以顺利完成。Nvidia docker镜像Nvida把cuda的docker镜像也做好了,直接从dockerhub下载就可以,当时的tensorflow不支持更高的cuda版本,nv...原创 2019-06-03 11:25:15 · 1382 阅读 · 0 评论 -
leetcode 51. N-Queens
之前写的8皇后蠢爆了,学习了一下,从新写,对递归认识进步一点。class Solution: def solveNQueens(self, n): """ :type n: int :rtype: List[List[str]] """ result = [] board = [-1 for ..原创 2018-12-04 20:49:28 · 253 阅读 · 0 评论 -
leetcode 236. Lowest Common Ancestor of a Binary Tree
题目给定一棵二叉树,找到给定的两个结点的最低共同祖先(LCA)。思路宽度优先搜索二叉树,使用一个字典parent记录每一对父子关系,设置早停标志flag,找到两个目标结点后就停止。然后通过父子关系字典构建一个列表list1一个集合set2,list1是其中一个结点到根节点的路径,是有顺序的,set2是另一个结点到根节点的路径包含的结点。逐个遍历list1,如果当前元素在set2中,该元素就是...原创 2018-11-27 14:11:10 · 156 阅读 · 0 评论 -
leetcode 402. Remove K Digits
题目给定一个用字符串表示的非负整数num,从这个整数中去掉k个数字,使得到的数字最小。思路暴扫,组合出剩余位数的全都可能的数字,逐个插入堆中,最后取出堆顶元素,TLE思考发现从左到右逐个扫描数字,如果后一个数字小于等于前一个数字,就把前一个数字去掉,得到的就是去掉一个数字以后的最小数字,依此类推,直到扫到最后一个数字,这时整个数字是按位数字从小到大排列的,如果此时去掉的数字不足k个,就从...原创 2018-11-25 17:52:31 · 223 阅读 · 0 评论 -
《python神经网络》读书笔记(三)
识别自己写的数字下面到了好玩儿的部分。用包含了旋转图像角度的数据训练好的200个隐藏层结点、10世代的模型,识别率为0.9771,识别我家三口写的0-9共30个数字,故意写得乱一点。正确识别了12个,识别率只有40%,在调节过程中我发现数字在图片中的位置和图片的对比度都会影响识别效果,我把测试集的对比度+0.1(值域是0.01 ~ 0.99)识别对了15个,+0.2,识别对了18个,对比度打满...原创 2018-05-30 17:44:20 · 500 阅读 · 0 评论 -
《python神经网络》读书笔记(二)
更多隐藏层书中分别对比了不同学习率,不同隐藏层结点数和不同训练世代的模型学习效果,没有对比多隐藏层的模型,我自己添加了一层隐藏层的代码,得出的训练结果如下: 世代 隐藏层 隐藏层结点数 学习率 识别率 训练时长(s) 1 2 10*10 0.2 0.7677 11.5368 1 2 20*20 0.2 0.8...原创 2018-05-28 18:02:11 · 312 阅读 · 0 评论 -
python与go线程性能简单对比
昨天看到一篇关于python多线程公众号文章,做了简单的对比试验。用python和go做单线程1亿递减到1和两个线程各自从5千万减到1,看程序执行时间:python一个线程:def decrement(n): while n > 0: n -= 1from time import perf_counter as pcstart = pc()dec...原创 2018-05-04 18:11:51 · 3688 阅读 · 0 评论 -
使用python的大规模linux服务器监控系统开发——信息收集方式及ssh慢和SSHException('No existing session',)问题
信息收集方式使用python的paramiko模块多线程ssh到每台服务器上执行shell命令,将返回结果处理入库。通过定时任务执行python脚本,采集间隔2分钟,crontab最低一分钟,对于主机指标监控足够了。目前优化的结果是750台主机40几秒完成,如果规模再大的话可以考虑将主机列表分成两部分分别放在两台服务器上收集,不过当然应该先优化并发执行能力。ssh慢的问题实行s...原创 2018-04-26 15:35:50 · 3989 阅读 · 0 评论 -
python解八皇后问题(二)——递归栈溢出
借着 python解八皇后问题(一) 研究一下栈溢出问题。pycharm里栈溢出报错是: Process finished with exit code -1073741571 (0xC00000FD)linux栈溢出报错是: Segmentation fault (core dumped)改造了一下函数:def eight_quene(x=0, y=0)...原创 2018-04-20 18:26:11 · 2103 阅读 · 0 评论 -
python解八皇后问题(一)
八皇后问题描述国际象棋8*8棋盘,64个位置,放8个皇后,皇后可以横竖斜线吃子,因此每个皇后所在的行、列和斜线都不能放皇后。小于5*5的棋盘无法每行放一个皇后,因此从五皇后以上可解N皇后问题。程序函数功能描述8*8棋盘用二位数据表示,初始全部为0,落子的位置改为1.allow_luozi函数判断某个位置是否可以落子,对于一个待判断的位置(x, y),如果以下位置都没有皇后,...原创 2018-04-19 21:52:56 · 2021 阅读 · 0 评论 -
python多进程逐对比较文档相似度+均分比较次数
多进程提高运算效率最近用python做数据处理,363个文件逐对比较相似度,总共65703次。之前学习神经网络发现cpu使用率只有30%多,应该是只用了一核,这次计算密集型任务,用多进程跑下看看提速效果。先把分析对象拆成多份,让每份的数量基本均匀,然后多线程跑,风扇果然嗡嗡起来了。下面是一个小样本量的测试结果,由于每次比对的计算量不同,所以效率不会是线性提升,我做了一个计算量相同的测试,效率也...原创 2018-06-06 21:31:56 · 832 阅读 · 2 评论 -
python multiprocess.pool —— 大家好,我是池子
上一篇博客python多进程逐对比较文档相似度+均分比较次数里面开始用multiprocess,用得很原始,比较笨。把100次比较切成等分的4份,每份25次,因为每次比较的计算量是不同的,虽然切成均分的份数了,但是实际上往往3个进程跑完了,还有一个计算量大的要单独跑半天。然后研究了一下pool,于是池子来了。少啰嗦,先看代码:result = Manager().list()p1 = ...原创 2018-06-14 10:40:45 · 1125 阅读 · 0 评论 -
leetcode 300.Longest Increasing Subsequence 最长递增子序列 动态规划
题目给定一个未排序的整数数组,找到最长递增子序列的长度。思路动态规划,使用一个数组dp记录原数组每一个位置的数字和到这个位置为止的最长子序列长度,dp数组元素是元组——(a:当前位置最长子序列长度,b:当前位置数字),遍历数组,每遍历到一个数字i,找到dp数组里面b小于i的全部元组里面最大的a记为x,向dp数组追加一个元组(x+1, i),这样dp数组里面记录了原数组截至至每一个位置的最...原创 2018-11-14 17:38:42 · 235 阅读 · 0 评论 -
leetcode 53. Maximum Subarray 最大子数组 分治算法
题目给定一个整数数组,找出和最大的连续子数组(至少包含一个元素)并返回最大和。尝试使用分治算法实现思路参考了《算法导论》里关于分治的讲解,正好就是这个题目,不过它的方法比较细致,把最大子数组的位置也求出来了。这道题只要求最大和,我简化了一下。思路是把数组从中间分成两部分,最大子数组要么是左半部分,要么是右半部分,要么是跨越中点,包含左右两个部分。递归比较各层的这三个部分的最大子数组和。...原创 2018-11-11 21:05:11 · 233 阅读 · 0 评论 -
leetcode 938. Range Sum of BST
题目给定一颗二叉搜索树的根节点,返回节点值在L和R之间(包括L和R)的节点值的和。思路写了一个完整的二叉搜索树,调整一下中序遍历的方法比较L和R就行了,注意在递归调用时要写上L和R这两个参数。如果是没有重复数字的BST,可以在递归查找左叶子之后比较一下R和右叶子的值,如果完全相等就早停,速度快了一倍。代码# Definition for a binary tree node.# c...原创 2018-11-12 22:07:28 · 608 阅读 · 0 评论 -
leetcode 822. Card Flipping Game 翻牌游戏
题目桌上有N张牌,正反面各有一个正整数(正反面的数可能不同)。我们翻任意数量的牌,然后选一张牌。如果选择的这张牌背面的数字X不在桌面上的牌的数字里,X就是好数。问最小的好数是几,如果没有,就返回0。fronts[i] 和 backs[i] 代表桌面上第i张牌的正面和反面数字。一次翻牌调换牌的正反面数字,翻完以后原来冲上的数字到了下面,原来冲下的数字到了上面。示例:Input: f...原创 2018-11-03 16:02:59 · 559 阅读 · 0 评论 -
leetcode 914. X of a Kind in a Deck of Cards
题目一摞牌,每张牌上写了一个整数,如果能找到一个大于等于2的数X,把牌分成1或多组满足下列条件:每组有X张牌每组里的每张牌上写得数字都是一样的Example 1:Input: [1,2,3,4,4,3,2,1]Output: trueExplanation: Possible partition [1,1],[2,2],[3,3],[4,4]Example 2:Input:...原创 2018-11-03 15:48:54 · 417 阅读 · 0 评论 -
Redis运用事务和管道从列表中一次弹出多个元素
需求:一个人脸识别流程,人脸定位的步骤将人脸数据推入redis的face_list,人脸识别的步骤有多个worker从这个list中弹出人脸进行识别。为了高效利用GPU,设置一个batch_size,在face_list的长度到达这个size以后每次批量取出容量为size个的人脸批量一次执行识别步骤,如果没有达到这个长度就把list中的元素全部取出同时执行一次识别步骤。redis的list作为队...原创 2018-10-30 10:58:14 · 3685 阅读 · 0 评论 -
leetcode 927.threeEqualParts 三等分
leetcode 927.threeEqualPartsclass Solution: def threeEqualParts(self, A): &quot;&quot;&quot; :type A: List[int] :rtype: List[int] &quot;&quot;&quot; A = [str(a) fo原创 2018-10-25 17:57:07 · 271 阅读 · 0 评论 -
手工计算F1和绘制ROC、AUC
学习了很多博客文章和书本内容,对评价模型的方法有了一点理解,自己编码绘制了一遍PRC和ROC、AUC,相当于粗糙实现sklearn里面的方法。# -*- coding:utf-8 -*-from __future__ import divisionimport numpy as npimport pandas as pdfrom sklearn.metrics import f1_s...原创 2018-06-29 10:53:47 · 1109 阅读 · 0 评论 -
通过写一个python区块链原型程序学习区块链
通过写一个区块链原型程序学习区块链 网上看到一篇翻译文章:https://learnblockchain.cn/2017/10/27/build_blockchain_by_python/ 学习一门技术最好的方法就是自己做一个,水平有限,手敲了一遍这个代码,边敲边学,在这个过程中对区块链有了更加全面的认识,同时也学习了一些python知识。 区块链基本概念区块链是一个分布式账本,每个参与挖矿的节点...原创 2018-02-15 23:11:42 · 7143 阅读 · 2 评论