def

Django连接池试验

人走茶凉 提交于 2020-10-08 08:57:33
前置 接口执行慢,需要优化,经过cProfile分析,时间大部分耗在数据库连接查询上,故去深究了下django关于db连接的情况,发现django是不支持数据库连接池的,遂查询django关于为啥不支持连接池的事情,以及试用了下目前开源的一些连接池,做此记录。 这篇主要解决我的以下疑问: web请求过来的流程? wsgi server 和 wsgi application如何交互? django何时建立db连接的? django何时关闭db连接的? django长连接是怎么回事? django为何没有连接池? django如何实现连接池? 工具 cProfile 拿它主要看耗时在哪里,不做无用功。 cProfile是Python自带的性能分析的内置模块,使用起来很方便,一段话就看的明白 import cProfile import re cProfile.run('re.compile("foo|bar")') 输出如下 197 function calls (192 primitive calls) in 0.002 seconds Ordered by: standard name ncalls tottime percall cumtime percall filename:lineno(function) 1 0.000 0.000 0.001 0.001 <string>

教你量化投资赚钱 python 常用 投资 策略 函数 公式 策略收益率 基准收益率 超额收益率及列表

前提是你 提交于 2020-10-08 02:26:13
import math from decimal import Decimal def profit(prevNum,nextNum): if prevNum==0:return 0 return Decimal((nextNum-prevNum)/prevNum).quantize(Decimal('0.00')) #参数:策略起始日收益、策略终止日收益 def strategyProfit(strategyList): #策略收益率 start = strategyList[0] end = strategyList[-1] return (end-start)/start #参数:基准起始日收益、基准终止日收益 def benchmarkProfit(benchmarkList): #基准收益率 start = benchmarkList[0] end = benchmarkList[-1] return (end-start)/start #参数:策略收益率、基准收益率 def excessProfit(strategyList,benchmarkList): #超额收益:策略和基准取终止日收益率 if(len(strategyList)==0 or len(benchmarkList)==0): return 0 return (strategyProfit

一篇文章教会你利用Python网络爬虫抓取王者荣耀图片

北战南征 提交于 2020-10-07 05:29:50
【一、项目背景】 王者荣耀作为当下最火的游戏之一,里面的人物信息更是惟妙惟肖,但受到官网的限制,想下载一张高清的图片很难。(图片有版权)。 以彼岸桌面这个网站为例,爬取王者荣耀图片的信息。 【二、项目目标】 实现将获取到的图片批量下载。 【三、涉及的库和网站】 1、网址如下: http://www.netbian.com/s/wangzherongyao/index.htm/ 2、涉及的库: requests 、 lxml 【四、项目分析】 首先需要解决如何对下一页的网址进行请求的问题。可以点击下一页的按钮,观察到网站的变化分别如下所示: http://www.netbian.com/s/wangzherongyao/index_2.htm http://www.netbian.com/s/wangzherongyao/index_3.htm http://www.netbian.com/s/wangzherongyao/index_4.htm 观察到只有index_()变化,变化的部分用{}代替,再用for循环遍历这网址,实现多个网址请求。 http://www.netbian.com/s/wangzherongyao/index_{}.htm 【五、项目实施】 1、我们定义一个class类继承object,然后定义init方法继承self,再定义一个主函数main继承self

Python+Selenium中级篇之5-Python获取系统时间和格式化时间显示/Python中字符串切割操作

笑着哭i 提交于 2020-10-07 04:38:06
Python获取系统时间和格式化时间显示 前面一篇文章介绍了,Python如何读取config.ini文件,还有如何获取当前项目根目录相对路径写法。在实际项目的开发,获取项目根路径的相对路径写法是很有必要的,不要去是绝对路径。因为,你自己开发的一个项目,如果拷贝到别的电脑里,发现运行不了,需要更改很多文件的路径,那是不是很失败。本篇文章介绍如何去获取和打印格式化系统时间,我们很多时候,看到一些日志,前面都会记录年月日,时分秒,甚至毫秒,然后才是日志描述。这一篇文章,介绍时间获取和格式化时间,就是为了后面,如何写一个简单的日志类做铺垫的。 在PyCharm下的一个包,右键,新建一个get_time.py文件,输入一下代码: 这里提醒一个小技巧:在输入导入包的时候,有些包你没有安装,不是系统自带的,可能会遇到红色下划线,你需要鼠标悬停在这个红色下划线,然后在这行的左侧有一个小灯泡,鼠标点击这个小灯泡,一般会有import this xxx 或者install xxx,根据提示来导入包或者安装第三方插件。 # coding=utf-8 import time class GetTime(object): def get_system_time(self): print (time.time()) # time.time()获取的是从1970年到现在的间隔,单位是秒 print (time

​LeetCode刷题实战22:括号生成

依然范特西╮ 提交于 2020-10-07 03:57:37
算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家聊的问题叫做 括号生成 ,我们先来看题面: https://leetcode.com/problems/generate-parentheses/ 描述 Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses. 给定n对括号,要求返回所有这些括号组成的不同的合法的字符串 For example, given n = 3, a solution set is: 输入:n = 3 输出:[ "((()))" , "(()())" , "(())()" , "()(())" , "()()()" ] 题解 这道题目非常有意思,解法也很多,还是老规矩,我们先由易到难,先从最简单的方法开始入手。 我们来简单分析一下题目,n个括号对意味着字符串的长度是2n,我们利用排列组合可以计算出,所有的组合种数一共有 种。 算一下会知道,这个数是很大的,也就是说我们哪怕一开始就知道答案,把答案遍历一遍也会有很高的耗时,所以这道题对于时间复杂度的要求应该不会很高。

K-means聚类算法及python代码实现

╄→尐↘猪︶ㄣ 提交于 2020-10-07 03:26:41
K-means 聚类算法( 事先数据并没有类别之分!所有的数据都是一样的 ) 1、概述 K-means 算法是 集简单和经典于一身的 基于距离的聚类算法 采用距离作为相似性的评价指标,即认为两个对象的距离越近,其相似度就越大。 该算法认为类簇是由距离靠近的对象组成的,因此把得到 紧凑且独立的簇作为最终目标。 2、核心思想 通过 迭代 寻找 k 个 类簇 的一种划分方案,使得用这 k 个 类簇 的均值来代表相应各类样本时所得的总体误差最小。 k 个聚类具有以下特点: 各聚类本身尽可能的紧凑,而各聚类之间尽可能的分开 。 k-means 算法的基础是 最小误差平方和准则 , 其代价函数是: 式中, μc(i) 表示第 i 个聚类的均值。 各 类簇 内的样本越相似,其与该类均值间的误差平方越小,对所有类所得到的误差平方求和,即可验证分为 k 类时,各聚类是否是最优的。 上式的代价函数无法用解析的方法最小化,只能有迭代的方法。 3、算法步骤图解 下图展示了对 n 个样本点进行 K-means 聚类的效果,这里 k 取 2 。 4、算法实现步骤 k-means 算法是将样本聚类成 k 个簇( cluster ),其中 k 是用户给定的 ,其求解过程非常直观简单,具体算法描述如下: 1) 随机选取 k 个聚类质心点 2) 重复下面过程直到收敛 { 对于每一个样例 i ,计算其应该属于的类:

JVM系列之:String.intern和stringTable

*爱你&永不变心* 提交于 2020-10-06 06:52:35
简介 StringTable是什么?它和String.intern有什么关系呢?在字符串对象的创建过程中,StringTable有起到了什么作用呢? 一切的答案都在本文中,快来看看吧。 intern简介 intern是String类中的一个native方法,所以它底层是用c++来实现的。感兴趣的同学可以去查看下JVM的源码了解更多的内容。 这里我们主要谈一下intern的作用。 intern返回的是这个String所代表的对象,怎么理解呢? String class维护了一个私有的String pool, 这个String pool也叫StringTable,中文名字叫做字符串常量池。 当我们调用intern方法的时候,如果这个StringTable中已经包含了一个相同的String对象(根据equals(Object)方法来判断两个String对象是否相等),那么将会直接返回保存在这个StringTable中的String。 如果StringTable中没有相同的对象,那么这个String对象将会被加入StringTable,并返回这个String对象的引用。 所以,当且仅当 s.equals(t) 的时候s.intern() == t.intern()。 intern和字符串字面量常量 我们知道在类文件被编译成class文件时,每个class文件都有一个常量池

Django实例,不断更新

对着背影说爱祢 提交于 2020-10-06 05:18:00
一、用户认证装饰器: 使用装饰器,实现代码重用。 1、django自带的装饰器 # 一、自带的函数装饰器 from django.contrib.auth.decorators import login_required # 修饰函数 # 修改login_required默认的转向地址: 在Settings.py中添加LOGIN_URL = '转向地址' @login_required def index(request): name = request.COOKIES.get('username') # 读取客户端的用户名 pw = request.COOKIES.get('userpw') # 读取客户端的密码 auth_name = 'root' auth_pw = '123456' return render(request, '/index/') # 二、自带的类装饰器 from django.utils.decorators import method_decorator # Django的类中函数装饰 # ---------装饰到类中的函数----------- class Index(View): @method_decrator(auth) def dispantch(self, request, *args, **kwargs): return super

Python爬虫之ip代理池

十年热恋 提交于 2020-10-06 03:30:38
可能在学习爬虫的时候,遇到很多的反爬的手段,封ip 就是其中之一。 对于封IP的网站。需要很多的代理IP,去买代理IP,对于初学者觉得没有必要,每个卖代理IP的网站有的提供了免费IP,可是又很少,写了个IP代理池 。学习应该就够了 ip代理池: 1,在各大网站爬去免费代理ip 2,检查ip可用 可用存入数据库1和2 3,在数据库1中拿出少量代理ip存入数据库2(方便维护) 4,定时检查数据库1和数据库2的代理数量,以及是否可用 5,调用端口 1,在各大网站爬去免费代理ip 1 def IPList_61(): 2 for q in [1,2 ]: 3 url= ' http://www.66ip.cn/ ' +str(q)+ ' .html ' 4 html= Requestdef.get_page(url) 5 if html!= None: 6 # print(html) 7 iplist=BeautifulSoup(html, ' lxml ' ) 8 iplist=iplist.find_all( ' tr ' ) 9 i=2 10 for ip in iplist: 11 if i<= 0: 12 loader= '' 13 # print(ip) 14 j= 0 15 for ipport in ip.find_all( ' td ' ,limit=2 ): 16 if

60%的人不懂Python中的多线程,本文教你

こ雲淡風輕ζ 提交于 2020-10-06 02:25:54
python 里有一个 threading 模块,其中提供了一个函数: threading.Thread(target=function, args=(), kwargs={}) function 是开发者定义的线程函数, args 是传递给线程函数的参数,必须是tuple类型, kwargs 是可选参数,字典类型。 调用 threading.Thread 之后,会创建一个新的线程,参数 target 指定线程将要运行的函数,args 和 kwargs 则指定函数的参数来执行 function 函数。 改写一下前面的代码,将抓取的部分放在一个函数中: def get_weather(city): req = requests.get('http://wthrcdn.etouch.cn/weather_mini?city=%s' % city) dic_city = req.json() city_data = dic_city.get('data') # 没有’data‘的话返回 [] print(city_data.get('city')) if city_data: city_forecast = city_data['forecast'][0] # 下面的都可以换成'get'方法 print(city_forecast.get('date')) print(city