- 博客(54)
- 问答 (1)
- 收藏
- 关注
原创 redis学习笔记(一)
通过多线程可以处理多个客户端的并发,但在生产环境,同一时刻创建100k或更多线程就会创建100k个线程,占用超多内存空间,导致内存溢出。一个线程(6.0的多线程是指I/O数据的收发多线程,业务逻辑还是单线程)处理很高并发,十万并发。一个线程一直循环,只要收发数据时间不要太长导致阻塞,就可以在很短时间处理很多连接。并且让selector传了一个OP_ACCEPT(IO事件,如连接事件,读写时间)serverscoket就是一个BIO模型,创建BIO类,监听9000端口,执行发现客户端没有连接,程序阻塞了。
2024-01-22 08:17:09
363
原创 算法笔记(一)
并查集问题互相连通的节点组成一个连通分量 如上图就是{0,1,2,5,6,7}{3,4,8,9}quick_find查询是否连通: 看对应的id是否一样连接:将所有与给定对象之一的相同ID对应的项改成一样的,实现合并操作,但会造成很多值需要改变直接代码实现:访问数组的此时查找:o(n)合并:哦(n^2)太慢了,改进一下Quick-union根节点相同则在一个连通分量里。合并时非常简单,令第一个元素的根节点链接到第二个元素的根节点上代码实现:都不支持巨大连通图,再改进一
2021-06-27 20:19:48
127
1
原创 django学习笔记(五)设计模式和模板层 if-else标签
传统MVCV:数据的过滤,怎样的数据需要显示,这些数据一旦拿到需要怎么去显示C:大脑,统筹django的mtvM:还是数据库增删改查 但有自己的语言规范T:既HTML,cssV:只是过滤数据,然后丢给T,让它显示C层也就是主路由urls.py文件,非常简化模板:是可以根据字典数据动态变化的html网页,可以根据视图中传递的字典数据动态生成相应的html网页。创建文件夹<项目名>/templates在settings.py中TEMPLATES配置项1.BACKEND:指定模
2021-06-27 18:56:38
898
2
原创 django学习笔记(四)
请求和响应get和post请求设计模式和模板层模板层-变量和标签模板层-过滤器和继承url反向解析请求时浏览器通过http协议发送给服务端的数据响应时服务器端就收到请求后做相应的处理在回复给浏览器端的数据...
2021-06-20 16:09:48
154
原创 django学习笔记(三)路由配置
路由配置path()函数from django.urls import pathpath(route, views, name = None)参数:1.route:字符串类型,匹配的请求路径2.views:指定路径所对应的试图处理函数的名称3.name:为地址起别名,在模板中地址反向解析时使用path转换器语法<转换器类型:自定义名>作用:若转换器类型匹配到对应类型的数据,则将数据按照关键字传参的方式传递给视图函数例:path('page/<int:page>'
2021-06-18 16:39:52
175
原创 django学习笔记(二)
manage.py直接执行python3 manage.py 可列出所有的django命令项目同名文件夹 mysite1/mysite1__init__:python包的初始或文件wsgi.py web服务网关的配置文件 django正式启动时需要用到urls.py 项目的主路由配置 http请求进入django时,优先调用该文件settings.py:项目的配置文件- 包含项目启动时需要的配置settings.py:公有配置(官方提供的基础配置)和自定义配置配置项格式为:BASE_DIR
2021-06-17 22:34:04
141
1
原创 django学习笔记(一)
由Python编写,完全开源。包含组件:基本配置文件、路由系统M(模型层:渲染)T(模板层:渲染)V(视图层)cookies和session分页及发邮件admin管理后台django官网https://docs.djangoproject.com/en/2.2创建对应项目文件夹django-admin startproject 项目名启动Django服务python3 manage.py runserver访问地址 默认8000端口http:/127.0.0.1:8000.
2021-06-17 20:02:38
57
原创 python爬虫学习笔记(10)xpath
xpath:最常用且最便携高效的一种解析方式,通用性。xpath解析原理:1.实例化一个etree的对象,且 需要将被解析的页面源码数据加载到该对象中。2.调用etree对象中的xpath 方法结合着xpath表达式实现标签的定位和内容的捕获。环境的安装:pip install lxml如何实例化一个etree对象from lxml import etree1.将本地的 HTML文档中的 源码数据加载到 etree对象中:etree.parse(filePath)2.可以将从互联网上获
2020-07-28 17:03:09
132
原创 python爬虫笔记(8)正则表达式和re库
format中文对齐问题昨天那个爬虫的中文没有对齐,改了下面这个函数就会对其了。def printUnivList(ulist, num): #输出模板变量 tplt = "{0:10}\t{1:{3}^10}\t{2:^10}" #输出 print(tplt.format("排名", "学校名称", "总分", chr(12288))) #循环 for i in range(num): u = ulist[i] prin
2020-07-24 17:03:10
108
原创 python爬虫笔记(7)
xml通过标签表达信息,成对出现,可扩展性好,但繁琐。json有类型的键值对,可以嵌套使用 ,适合程序处理(js),较xml简洁。“key”:“value”“key”:[“value1”, “value2”]“key”:{“subkey”:“subvalue”}yaml无类型键值对,也就是没有引号,文本信息比例最好,可读性好。name:-北京理工大学-天津大学#表示注释,-表示并列的值信息,键值对之间可以嵌套。信息提取的一般方法方法一:完整解析信息的标记形式,再提取关键信息。优
2020-07-23 17:03:18
99
原创 python爬虫笔记(5)beautifulsoup
pip install beautifulsoup安装beautifulsoup的时候出现错误ERROR: Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output.网上搜了一下是版本不对,加个4就行了pip install beautifulsoup4import requestsfrom bs4 import BeautifulSoupr
2020-07-22 17:00:59
108
原创 python的爬虫笔记(4)scrapy框架学习
Scrapy Engine:多进程代码,提供并发的支持。已经实现好的,不需要修改。Scheduler(调度器):存储以及调度(URL+函数)=Request。已经实现好的,不需要修改。Downloader(下载器):跟request.get的部分封装到这里面。通过Request下载返回值(HTML,JSON),RESPONSE。已经实现好的,不需要修改。Spiders(蜘蛛):获取到了Response之后,需要定位具体信息。需要自己写的。item pipeline(项目管道):存储或者是急需处理具体
2020-07-22 08:21:41
104
原创 python爬虫笔记(6)
request.get(url, params=None,**kwargs)url:拟获取页面的url链接params:url中的 额外参数,字典或字节流格式,可选**kwargs:12个控制访问的参数r.status_code:HTTP请求的返回状态,200表示连接成功,404表示连接失败。r.text:HTTP响应内容的 字符串形式,即,url对应的页面内容。r.encodeing:从HTTP header中猜测的响应内容编码方式。r.apparent_encoding:从内容中分析出的.
2020-07-21 13:59:48
143
原创 python爬虫笔记(3)第一个爬虫和xpath
1.接口解析2.第三方破解通用爬虫 -》 今日头条 谷歌 百度url(网址) -》DNS解析 -》下载网页聚焦爬虫 精准的抓取网页监控爬虫 定时爬虫url组成:http (http + ssl(安全套接层 )) http(超文本传输协议) 域名#已被淘汰import urllib#现在常用import requests#获取百度的对象response = requests.get(‘https://www.baidu.com/’)#返回成功 也就是200print(respon
2020-07-16 09:30:48
296
原创 python爬虫小练习(2)自动下载B站排行榜视频
#requests 爬虫第三方库 模拟浏览器请求后台数据import requestsimport you_get #视频下载库import sys #调用系统的命令行from pyquery import PyQuery as pq #数据提取的#爬虫工程师 # 反扒 加密破解 验证登录 分布式 云计算# 数据抽取 清晰 消重# 维护爬虫系统# ja ajax html css# app抓包# scrapy框架 高并发 异步 。。。#python开发# docker
2020-07-15 15:09:12
256
原创 python的anaconda的matplotlib-条形图
import matplotlib.pyplot as pltimport numpy as npimport matplotlib.pyplot as pltimport numpy as np#准备数据GDP = [10, 20, 30, 40, 50]plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']plt.rcParams['axes.unicode_minus'] = False#绘图plt.bar(range(5)
2020-07-13 17:04:55
679
原创 python的爬虫笔记(1)scrapy框架学习
HTTP协议http:普通http协议,不太安全https:安全请求方法(method) **GET 常用于从服务器获取数据请求数据在URL中(也就是header中)传输数据量小,支持缓存POST 常用于向服务器发送**数据请求数据在body中传输数据量admin,不缓存PUT 类似POST,向服务器发送数据HEAD 类似于GET,但服务器只返回头部,常用于检测浏览器是否在线OPTIONS 对服务器进行一些配置DELETE 要求服务器删除某个数据状态码:200 成功404
2020-07-13 16:02:56
165
原创 python学习笔记(二十)内建模块collection
collections是Python内检的一个集合模块,提供了许多有用的集合类。namedtuple我们知道tuple可以表示不变集合,比如坐标,但只是两个数字很难看出这是个坐标,这时候就可以用namedtuple.from collections import namedtuplePoint = namedtuple('Point' , ['x', 'y'])p = Point(1, 2)print(p.x)print(p.y)namedtuple是一个函数,它用来创建一个自定义的 t
2020-07-10 09:37:41
97
原创 python学习笔记(十九)内建模块datetime
datetimedatetime是Python处理日期和时间的标准库。获取当前日期和时间我们先看如何获取当前日期和时间: from datetime import datetimenow = datetime.now() #获取当前datetimeprint(now)print(type(now))结果 :2020-07-08 13:35:00.903533<class 'datetime.datetime'>datetime是模块,模块里还有datetime类,通
2020-07-09 11:31:25
262
原创 python学习笔记(十八)正则表达式初入门
分布式进程在Thread和Process中,应当优选Process,因为Process更稳定,而且Process可以分布到多台机器上,而Thread最多只能分不到同一台机器的多个CPU上。Python的multiprocessing模块不但支持多进程,其中managers子模块还支持把多进程分布到多台机器上。一个服务进程可以作为调度者,将任务分配到其它多个进程中,依靠网络通信。由于managers模块封装很好,不必了解网络通信的细节,就可以很容易地编写分布式多进程程序。例:有一个通过Queue通信的多
2020-07-08 11:59:43
137
原创 廖雪峰Python学习笔记(十七) threadlocal
ThreadLocal多线程环境下,每个线程都有自己的数据,一个线程使用自己的局部变量比使用全局变量好,因为局部变量只有线程自己使用,不会影响其它线程,全局变量还得加锁使用。但局部变量在函数调用时,传递麻烦:def process_student(name): std = Student(name) # std是局部变量,但是每个函数都要用它,因此必须传进去: do_task_1(std) do_task_2(std)def do_task_1(std): do
2020-07-07 14:41:04
178
原创 Python学习笔记(十六)多进程和多线程
多进程要实现多进程(multiprocessing),首先要了解 操作系统的相关知识Unix/Linux操作系统提供了 一个fork()系统调用,他非常 特殊 ,普通函数调用一次返回一次,fork()调用一次返回两次,这是操作系统自动把当前进程(父进程)复制了一份(子进程),分别在父进程和子进程内返回。子进程永远返回 0,而父进程返回子进程的ID。这样做的理由是,一个父进程可以fork出很多子进程,所以父进程要记下没格子进程 的 ID ,而子进程只需要调用getppid()就可以拿到父进程的ID。P
2020-07-07 13:58:12
162
原创 python学习笔记(十五)json数据转化
操作文件和目录操作文件和目录的函数一部分防砸OS模块中,一部分在os.path模块中。查看、创建和删除目录可以这么调用:查看当前目录的绝对路径:import oss = os.path.abspath('.')print(s)#结果:G:\zrx\demoproject在某个目录下创建一个新目录,首先把新目录 的完整路径表示出来:s = os.path.join('G:\zrx\demoproject', 'testdir')print(s)#结果:G:\zrx\demoproje
2020-07-06 17:02:55
347
原创 python中的pygame小练习(3)碰撞精灵和碰撞检测
五个小球随机出现,随机速度,在窗口中乱逛。import pygameimport sysfrom pygame.locals import *from random import *class Ball(pygame.sprite.Sprite): #这是pygame的碰撞基类,继承就行了 def __init__(self, image, position,speed, bg_size): #球的图片,球的位置,球的速度 pygame.sprite.Sprite
2020-07-04 15:05:21
1622
原创 python练习,飞机大战(1)小甲鱼
游戏基本设定敌方共有大中小三款飞机 ,分为 高中低三种速度;子弹的射程并非 全屏,而大概是屏幕长度的80%;消灭小飞机需要 1发 子弹,中飞机 需要8发,大飞机需要20发;每消灭一家小飞机得1000分 ,中飞机6000分,大飞机10000分;每个30秒有一个随机的道具补给,分为两种道具,全屏炸弹 和双倍子弹;全屏炸弹最多只能存放 3枚,双倍子弹可以维持18秒钟的效果;游戏将根据分数逐步提高难度,难度的提高表示飞机数量的增多 以及速度的加快。中飞机和大飞机增加血槽的显示;...
2020-07-04 10:56:40
941
2
原创 python中的pygame小练习(2)基本图形绘制
基本图形绘制绘制矩形pygame.draw.rect(screen,BLACK,(50, 50, 150, 50), 0)#Surface :矩形绘制在哪个Surface对象上# color:边框颜色# Rect:指定矩形范围,就是四个左边点的位置# width: 指定边框大小,0表示填充这个矩形,1表示边框一个像素绘制多边形polygon(Surface, color, pointlist, width=0)#Surface :矩形绘制在哪个Surface对象上# color:边框颜色
2020-07-04 09:49:00
510
2
原创 python的pygame小练习
例:一个老虎对象自己动,按上下左右键的话会随按键动。import pygameimport sys#把pygame所有的常量名导入from pygame.locals import *#初始化Pygamepygame.init()size = width, height = 1000, 600speed = [-2, 1]bg = (255, 255, 255) #rgb颜色clock = pygame.time.Clock()#创建指定窗口大小,返回surfaces
2020-07-03 16:57:13
666
原创 python学习笔记(十四)IO编程、操作文件和目录
IO 编程文件读写读写文件是最常见 的IO 操作。Python内置了读写文件的函数,用法和C是兼容的。在读写文件之前,要了解,在磁盘上读写文件的功能都是由操作系统提供的 ,现代操作系统不允许普通的程序直接操作磁盘,所以,读写文件就是请求操作 系统打开一个文件对象(文件描述符),然后,通过操作系统提供的接口从这个文件 对象中读取数据(读文件),或者把数据写入这个文件对象(写文件)。读文件要以读文件模式打开一个文件对象,使用Python内置的open()函数,传入文件名和标识符:>>&g
2020-07-02 17:03:33
240
原创 question
装饰器propert的详解在函数前调用,看函数的运行时间在函数前调用,检查没有重复值@uniqueclass Weekday(Enum):Sun = 0Mon = 1Tue = 2Wed = 3Thu = 4Fri = 5正常情况下我们在父类中是不能对子类的属性进行操作,但是元类可以。元类、装饰器、类装饰器都可以归为元编程。metaclass低层详解https://zhuanlan.zhihu.com/p/98440398包导入不进来王茂杰...
2020-07-02 15:06:24
102
原创 python学习笔记(十三)调试,单元测试,文档测试(这个有问题 ,没调成功)
调试程序一次写完不出错的概率很小,有的bug看错误信息就知道,有的变量值是错误的,因此 需要一整套调试程序的手段来修复bug。第一种方法简单直接粗暴有效,就是print()把可能有问题的变量打印出来:def foo(s): n = int(s) print('>>>n = %d' % n) return 10 / ndef main(): foo('0')main()用point的最大坏处是还得删掉他,如果程序里都是print(),运行结果也
2020-07-02 13:38:45
523
1
原创 python学习笔记(十二)错误处理
错误处理在程序运行过程中,如果发出了错误,可以事先约定返回一个错误代码,这样就可以知道是否有错,以及出错的原因。在操作系统提供的调用中,返回错误码非常常见。比如打开文件的函数open(),成功时返回文件描述符(就是一个整数),出错时返回-1.用错误码来表示是否出错十分不便,因为函数本身应该返回的正常结果和错误码混在一起,调用者必须用大量代码判断是否出错。def foo(): r = some_function() if r==(-1): return (-1)
2020-07-01 17:01:37
148
原创 python学习笔记(十一)metaclass太难了QAQ
metaclass除了使用type()动态创建类以外,要控制类的创建行为,还可以使用metaclass元类。当我们定义了类以后,就可以根据这个类创建出实例,所以:先定义类,然后创建实例。如果想创建类,就得用metaclass,先定义metaclass,然后创建类。连接起来:先定义metaclass,创建类,最后创建实例。metaclass允许你创建类 或者修改类,可以把类看成是metaclass创建出来的实例。__init__是实例对象创建完成后被调用的,然后设置对象属性的一些初始值。__n
2020-07-01 14:26:27
109
原创 python学习笔记(十)枚举类
使用枚举类定义常量①用大写变量,好处简单,缺点本质仍是变量②更好的是为这样的枚举类型定义一个class类型,然后,每个 常量都是class 的一个唯一实例。python提供了Enum类来实现这个功能:from enum import EnumMonth = Enum('Mouth', ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Aug', 'Sep', 'Oct', 'Nov', 'dec'))#用for in 遍历 Munth这个枚举类#__m
2020-06-30 17:02:23
190
原创 python学习笔记(九)定制类
定制类class中有许多前后双下划线的特殊用途函数,比如__slots__限制属性范围,__len__()让 class作用域len()函数。__str__class Student(object): def __init__(self, name): self.name = name def __str__(self): return 'student object(name:%s)' % self.nameprint(Student('Mi
2020-06-30 11:47:57
188
原创 python学习笔记(八)property装饰器真麻烦
获取对象信息使用type()首先,我们来判断对象类型,使用type()函数:基本类型都可以用type()判断:>>> type(123)<class 'int'>>>> type('str')<class 'str'>>>> type(None)<type(None) 'NoneType'>变量、函数、类也可以>>> type(abs)<class 'builtin_f
2020-06-29 17:02:47
171
原创 python学习笔记(七)Anaconda3安装时遇到问题
安装第三方模块Anaconda3Warning: This Python interpreter is in a conda environment, but the environment has not been activated. Libraries may fail to load. To activate this environment please see https://conda.io/activation一直出现这个问题,我也是醉了先进(base)模式具体命令我给关了,现
2020-06-29 12:50:54
921
原创 python学习笔记(六)模块和作用域,为什么__main__可以测试运行有点不懂
模块python有许多内置函数,只要 安装完毕,这些模块就可以使用。以内建的sys模块为例,编写 一个hello模块:#!/usr/bin/env python3 #可以让这个.py文件直接在Unix/Linux/Mac上运行# -*- coding: utf-8 -*- #表示.py文件本身使用标准UTF-8编码__author__ = 'Michael Liao' #使用__author__变量把作者写进去,这样当你公开源代码后别人就可以瞻仰你的大名import sysdef
2020-06-28 17:02:19
109
原创 python学习笔记(五)难点是闭包过一阵再看一遍
返回函数不仅可以返回多个 值 ,还可以返回 函数例:def lazy_sum(*args) #参数是未知个数的 def sum() #在函数里面定义求和函数 ax = 0 #初值 为0 for n in args: #把agss的数遍历一遍 ax = ax + n #所有 数 相加 return ax #返回求和的值 return sum
2020-06-28 15:59:49
127
原创 python学习笔记(四)高阶函数
高阶函数map/reducemap()函数接收两个 参数,一个是函数,一个是iterable,map将 传入的函数依次作用到序列的每个元素,并把结果作为新的iterator返回。例:def f(x): return x * xr = map(f, [1, 2, 3, 4])for x in r: print(x)map()传入的第一个参数 是f,即函数对象本身。由于结果 r是一个iterator迭代器,iterator 是惰性 序列 ,因此通过list()函数让它把整个序列
2020-06-27 16:59:11
254
转载 python学习笔记(三)生成器和迭代器
生成器在循环的过程中不断推算出后续的元素,用以节省空间,这种一边循环一边计算的机制,成为生成器:generator,带 yield!方法一:把列表生成式的[]改成()>>> L = [x * x for x in range(10)]>>> L[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]>>> g = (x * x for x in range(10))>>> g<generato
2020-06-27 11:52:08
113
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人