
python
hide_in_darkness
萌新一枚
展开
-
[python基础]生产者消费者模型
文章目录生产者消费者模型为什么要使用生产者消费者模型什么是生产者消费者模型基于队列实现的生产者消费者模型采用`JoinableQueue`队列实现生产者消费者模型生产者消费者模型在并发编程中使用生产者和消费者模式能够解决绝大多数并发问题该模式通过平衡生产线程和消费线程的工作能力来提高程序的整体处理数据的速度为什么要使用生产者消费者模型在线程世界里,生产者就是生产数据的线程,消费者就是消费数据的线程在多线程开发当中,如果生产者处理速度很快,而消费者处理速度很慢,那么生产者就必须等待消费者处理完,才原创 2020-10-29 11:02:09 · 295 阅读 · 0 评论 -
[python基础]进程基础知识
文章目录进程概念1. 什么是进程3.进程的属性进程的名称4.程序和进程的区别进程的调度算法1.短作业优先:2. 先来先服务:3. 时间片轮转法4.多级反馈算法1.进程的开启和关闭进程之间的通讯(IPC,Inter Process Communication)处理进程之间的通讯的工具叫做__通讯中间件__2. 进程的三状态图1. 就绪(Ready)状态2. 执行/运行(Running)状态3. 阻塞(Blocked)状态先看个多进程的小案例上下文和启动方式(重点)在进程之间交换对象1.队列1.`multipr原创 2020-10-29 10:18:54 · 1032 阅读 · 1 评论 -
[python基础]线程基础知识
文章目录线程概念创建一个简单的线程1. 多线程与多进程的`pid`的区别2. 多线程与多进程的效率比较3. 数据共享Thread类的方法和属性threading模块基础方法为什么最小是`32kib`的一个整数?保护线程创建线程本地数据锁对象观察下面程序1. 互斥锁`class threading.Lock`创建互斥锁对象`threading.Lock()`特殊情况——死锁2. 递归锁`class threading.RLock`创建递归锁 `threading.RLock()`运用递归锁解决死锁现象其余对象原创 2020-10-29 01:07:07 · 681 阅读 · 1 评论 -
[python网络编程]用户验证
文章目录用户验证使用haslib来实现使用hmac来实现用户验证使用haslib来实现server服务端import socketimport osimport hashlibimport timeimport structimport hmacIP = ""PORT = 0SECRET_KEY = b""server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)server.bind((IP, PORT))原创 2020-10-25 23:03:33 · 315 阅读 · 0 评论 -
[python网络编程]文件上传
文章目录文件上传文本文件上传大文件上传文件上传文本文件上传server服务端import socketimport jsonimport structimport timeIP = ""PORT = 0server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)server.bind((IP, PORT))server.listen(5)client, _ = server.accept()size = s原创 2020-10-25 21:55:07 · 198 阅读 · 0 评论 -
[python基础]进程池基础知识
文章目录线程Thread`class threading.Thread(*group=None*, *target=None*, *name=None*, args=(), kwargs={}, daemon=None*)`创建线程本地数据锁通过网上的一个实例:进程先看个实例上下文和启动方式在进程之间交换对象进程协程协程更多关于python线程线程Threadclass threading.Thread(*group=None*, *target=None*, *name=None*, args原创 2020-10-24 22:02:14 · 440 阅读 · 0 评论 -
[python基础]装饰器、迭代器、生成器
装饰器装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象它经常用于有切面需求的场景,比如:插入日志、性能测试、事务处理、缓存、权限校验等场景。装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量与函数功能本身无关的代码并继续重用现在python装饰器支持了@语法糖带参数的装饰器基于类实现的装饰器装饰器函数其实是这样一个接口约束,它必须接受一个callable对象作为参数,然后返回一个callable对象。原创 2020-10-23 00:24:19 · 369 阅读 · 4 评论 -
[python基础]map、reduce、lambda、filter四个基本函数的使用
map函数map函数根据提供的函数对指定的序列(可迭代的)做映射定义:map(function, sequence[,sequence,…])—>list返回一个map类型的可迭代对象def create_content(mes): return map(lambda x: x+2, mes)def write_content_item(result): for i in result: print(i, end=" ")content = cr原创 2020-10-22 18:37:25 · 169 阅读 · 0 评论 -
[python爬虫]常用user_agent.py
在分布式爬虫中,为了获取多样的爬虫信息,我们通常会采用不同的user_agent去访问,我在这里提供了一些user_agentimport random# pc端的user-agentuser_agent_pc = [ # 谷歌 'Mozilla/5.0.html (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.html.2171.71 Safari/537.36', 'Moz原创 2020-10-18 11:16:40 · 345 阅读 · 1 评论 -
pytest学习--参数和skip
import pytestimport sysimport requests# pytest.mark.skip 跳过用例""" pytest.mark.skip(*,reason = None ) :param reason(str)跳过测试功能的原因"""@pytest.mark.skip(reason='there is no way')def test_the_unknown(): print("这条测试用例将会被跳过") assert 1原创 2020-09-06 23:52:41 · 357 阅读 · 0 评论 -
pytest学习--fixture
import pytestimport smtplibimport contextlib# @pytest.fixture(scope='function')# def smtp_connection():# return smtplib.SMTP("smtp.gmail.com", 587, timeout=5)### '''# pytest --fixtures test_simplefactory.py# 查看可用的灯具(带前缀的灯具_仅在添加-v选项后原创 2020-09-06 23:50:13 · 207 阅读 · 0 评论 -
pytest学习--断言
import pytest"""断言"""def f(): return 3# pytest允许您使用标准python assert来验证Python测试中的期望和值def test_function(): assert f() == 4, "never see you again" # 自行断言 # 断言可以指定一条消息,assert condition, message # 消息将简单地显示在跟踪中AssertionError: message原创 2020-09-06 23:14:34 · 162 阅读 · 0 评论 -
pytest学习--基础测试
import pytest''' 安装pytest: pip install pytest 查看pytest版本: pytest --version pytest参数帮助: pytest -h | --help pytest遵循其Python测试发现约定来发现所有测试 因此它会找到两个带test_前缀的函数 且无需继承任何子类'''# import pdb# '''# pytest允许您在每次测试开始时通过命令行选项立即进入PDB提示符:原创 2020-09-06 22:54:51 · 153 阅读 · 0 评论 -
selenium项目实战--源道
case/testcase中的test_exa.py文件实现功能:源道的登录创建用例修改用例import unittestfrom selenium import webdriverfrom ddt import ddt, data, unpackimport timefrom utils.log_cn import make_assert_actionimport random@ddtclass TestExa(unittest.TestCase): @classm原创 2020-09-05 08:00:36 · 303 阅读 · 0 评论 -
python脚本--smtp实现自动发送邮件
发送普通信件import smtplibfrom email.mime.multipart import MIMEMultipartfrom email.mime.text import MIMETextfrom smtplib import datetimefrom email.header import Header# 发送普通信件def send_email(): # 发送邮箱服务器(这里以新浪为例) smtpserver = 'smtp.sina.cn' #原创 2020-09-05 07:50:53 · 325 阅读 · 0 评论 -
selenium学习--PO模型
PO模型:BasePage 基础页面主要设置底层操作,包括初始化浏览器,打开关闭、元素定位等通用功能# encoding:utf-8# dirname:base_pageimport timeclass BasePage(object): def __init__(self, driver, url): self.driver = driver self.url = url def open(self): self.drive原创 2020-09-05 07:45:19 · 1085 阅读 · 0 评论 -
selenium学习--ddt数据驱动
# UnitTest@ddt# 测试用例类继承自unittest.TestCase# 从TestCase类继承是告诉unittest模块这是一个测试用例的方法:class TtUnit(unittest.TestCase): # 前置操作 def setUp(self) -> None: self.driver = TestKeys('Chrome', 'https://www.baidu.com') # 后置操作 def tearDown(s原创 2020-09-05 07:23:02 · 245 阅读 · 0 评论 -
selenium学习--unittest框架
基础框架# UnitTest# 测试用例类继承自unittest.TestCase# 从TestCase类继承是告诉unittest模块这是一个测试用例的方法:class TtUnit(unittest.TestCase): # 前置操作 def setUp(self) -> None: self.driver = TestKeys('Chrome', 'https://www.baidu.com') # 后置操作 def tearDown(s原创 2020-09-05 07:20:33 · 269 阅读 · 0 评论 -
selenium学习--关键字驱动
# encoding:utf-8from selenium import webdriverfrom selenium.webdriver.common.keys import Keysimport unittestimport timeimport refrom ddt import ddt, data, unpack# 浏览器初始化def init_web(type_str, url): if type_str == 'Chrome': # 创建 Chrome原创 2020-09-05 07:17:32 · 374 阅读 · 0 评论 -
selenium项目实战--126邮箱的登录和发送邮件
import unittestfrom selenium import webdriverimport timefrom ddt import ddt, data, unpack@ddtclass EmailTest(unittest.TestCase): @classmethod def setUpClass(self) -> None: self.driver = webdriver.Chrome() self.driver.get('原创 2020-09-05 07:14:00 · 950 阅读 · 0 评论 -
python库的解析--selenium-python自动化(selenium库)
from selenium import webdriverfrom selenium.webdriver import ActionChainsfrom selenium.common.exceptions import TimeoutException, NoSuchElementExceptionfrom selenium.webdriver.support.wait import WebDriverWaitfrom selenium.webdriver.support import expe原创 2020-09-01 10:48:10 · 312 阅读 · 0 评论 -
selenium项目实战--百度查询
import timefrom selenium import webdriverfrom selenium.webdriver.common.by import Byimport unittestfrom ddt import ddt, data, unpackclass BasePage(object): def __init__(self, driver, url): self.driver = driver self.url = url原创 2020-08-31 19:52:48 · 207 阅读 · 0 评论 -
python库的解析--数据存储(csv库)
import csvdef common_write(): with open('data.csv', 'w', newline='') as csvfile: ''' 如果没有指定 newline='',则嵌入引号中的换行符将无法正确解析,并且在写入时,使用 \r\n 换行的平台会有多余的 \r 写入 ''' # csv.writer(csvfile, dialect='excel', **fmtparams)原创 2020-08-29 16:07:31 · 367 阅读 · 0 评论 -
python库的解析--数据存储(txt文件读写,json库)
txt文件读写import requestsfrom pyquery import PyQuery as pqurl = 'https://www.zhihu.com/explore'headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 ' '(KHTML, like Gecko) Chrome/86.0.4209.2 Safari/原创 2020-08-29 12:27:34 · 340 阅读 · 0 评论 -
python库的解析--PyQuery(pyquery库)
from pyquery import PyQuery as pq''' pyquery是CSS选择器和jQuery的结合用法'''html = """<div><ul> <li class="item-0">first item</a></li><li class="item-1"><a href="link2.html">second item</a></li><原创 2020-08-29 10:31:30 · 196 阅读 · 0 评论 -
python库的解析--BeautifulSoup(bs4库)
from bs4 import BeautifulSoupimport cssselecthtml = """<html><head><title>The Dormouse's story</title></head><body><p class="story">Once upon a time there were three little sisters;and their names were<a原创 2020-08-29 09:09:27 · 248 阅读 · 0 评论 -
python库的解析--xpath语法
xpath语法表达式描述nodename选取此节点的所有子节点。/从根节点选取。//从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。.选取当前节点。…选取当前节点的父节点。@选取属性。text()获取文本内容[nodename]根据节点筛选contains(@属性,“内容”)模糊查询import lxml.etree as letext = '''<!DOCTYPE html><原创 2020-08-28 13:17:38 · 224 阅读 · 0 评论 -
python爬虫--猫眼电影TOP100榜爬取
import requestsfrom requests.exceptions import RequestExceptionimport reimport jsonimport timedef write_to_file(content): with open('result.txt', 'a', encoding='UTF-8') as f: f.write(json.dumps(content, ensure_ascii=False)+'\n')def pa原创 2020-08-28 08:44:58 · 382 阅读 · 0 评论 -
python库的解析--requests常用指令(requests库)
import requestsimport reimport urllib.request as urimport http.cookiejarimport loggingfrom requests.auth import HTTPBasicAuthfrom requests_oauthlib import OAuth1def basic_message(): url = 'http://www.baidu.com' res = requests.get(url=url)原创 2020-08-27 13:17:28 · 728 阅读 · 0 评论 -
[python爬虫]urllib.request库的学习
import urllib.request as urimport urllib.parse as upimport socketimport osimport urllib.error as ueimport http.cookiejar# 普通的opener对象def get_res(): try: url = 'https://httpbin.org/post' wd = 'python' data = {原创 2020-08-26 08:42:27 · 439 阅读 · 0 评论 -
[python爬虫]request引发的异常(urllib.error库)
from urllib.error import *import urllib.request as urtry: url = 'https://www.baidu.com' res = ur.urlopen(url) print(res.read().decode('UTF-8'))# exception urllib.error.ContentTooShortError(msg, content)# 此异常会在 urlretrieve() 函数检测到已下载的数据量小于原创 2020-08-25 10:48:40 · 319 阅读 · 0 评论 -
[python爬虫]URL解析(urllib.parse库)
from urllib.parse import *""" urllib库的parse模块定义了处理URL的标准接口"""url = "https://so.iqiyi.com/so/q_%25E9%25A9%25AF%25E9%25BE%2599%25E9%25AB%2598%25E6%2589%258B?" \ "source=suggest&sr=17221995103565892&ssrt=20200825083940436&ssra=e2191原创 2020-08-25 10:18:22 · 747 阅读 · 0 评论 -
[python爬虫]--robots.txt机器人协议(urllib.robotparser库)
from urllib.robotparser import *# 获取robots协议内容def get_robots(robot_url): """ :param robot_url: :return: """ # class urllib.robotparser.RobotFileParser(url='') rp = RobotFileParser() ''' 这个类提供了一些可以读取、解析和回答关于 url 上的 r原创 2020-08-25 08:13:46 · 602 阅读 · 0 评论 -
python语言程序设计基础(第二版)第一章课后习题
import turtle# 1str1 = input("请输入一个人的名字:")str2 = input("请输入一个国家名字:")print("世界这么大,{}想去{}看看".format(str1, str2))# 2n = input("请输入整数N:")sum = 0for i in range(int(n)): sum += iprint("1到N求和结果:", sum)# 3for i in range(1, 10): for j in range(原创 2020-08-20 22:35:23 · 982 阅读 · 0 评论 -
python库的解析--正则表达式(re库)
.在默认模式,匹配除了换行的任意字符 。如果指定了标签 DOTALL ,它将匹配包括换行符的任意字^匹配字符串的开头, 并且在 MULTILINE 模式也匹配换行后的首个符号$匹配字符串尾或者换行符的前一个字符,在 MULTILINE 模式匹配换行符的前一个字符*对它前面的正则式匹配0到任意次重复, 尽量多的匹配字符串+对它前面的正则式匹配1到任意次重复?对它前面的正则式匹配0到1次重复...原创 2020-08-20 19:47:43 · 373 阅读 · 0 评论 -
Turtle实战--太极图
import turtle# 画上勾玉def draw_top(): turtle.penup() make_border_line(-1)# 画下勾玉def draw_down(): turtle.fillcolor("black") turtle.begin_fill() turtle.penup() make_border_line(1) turtle.end_fill()# 画勾玉def make_border_line原创 2020-07-28 15:00:50 · 391 阅读 · 0 评论 -
Turtle库学习--Screen专有方法、公共类
turtle.bye()关闭海龟绘图窗口。turtle.exitonclick()将 bye() 方法绑定到 Screen 上的鼠标点击事件turtle.setup(width=_CFG[“width”], height=_CFG[“height”], startx=_CFG[“leftright”], starty=_CFG[“topbottom”])设置主窗口的大小和位置参数width – 如为一个整型数值,表示大小为多少像素,如为一个浮点数值,则表示屏幕的占比;默认为屏幕的 50%h原创 2020-07-28 14:10:05 · 1594 阅读 · 0 评论 -
Turtle库学习--输入方法、设置与特殊方法
turtle.textinput(title, prompt)参数title – stringprompt – string弹出一个对话框窗口用来输入一个字符串形参 title 为对话框窗口的标题prompt 为一条文本,通常用来提示要输入什么信息返回输入的字符串如果对话框被取消则返回 Noneturtle.numinput(title, prompt, default=None, minval=None, maxval=None)参数title – stringtitle 为对话框原创 2020-07-28 13:57:13 · 3348 阅读 · 0 评论 -
Turtle库学习--动画控制与屏幕事件
turtle.delay(delay=None)参数delay – 正整型数设置或返回以毫秒数表示的延迟值 delay。(这约等于连续两次画布刷新的间隔时间。) 绘图延迟越长,动画速度越慢turtle.tracer(n=None, delay=None)参数n – 非负整型数delay – 非负整型数启用/禁用海龟动画并设置刷新图形的延迟时间如果指定 n 值,则只有每第 n 次屏幕刷新会实际执行如果调用时不带参数,则返回当前保存的 n 值。第二个参数设置延迟值turtle.update原创 2020-07-28 13:33:30 · 3164 阅读 · 0 评论 -
Turtle库学习--TurtleScreen/Screen 方法及对应函数
turtle.bgcolor(*args)参数args – 一个颜色字符串或三个取值范围 0…colormode 内的数值或一个取值范围相同的数值3元组设置或返回 TurtleScreen 的背景颜色turtle.bgpic(picname=None)参数picname – 一个字符串, gif-文件名, “nopic”, 或 None设置背景图片或返回当前背景图片名称如果 picname 为一个文件名,则将相应图片设为背景如果 picname 为 “nopic”,则删除当前背景图片如果原创 2020-07-28 12:24:27 · 7857 阅读 · 0 评论