自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(19)
  • 问答 (1)
  • 收藏
  • 关注

原创 RabbitMQ(四)话题模式

1. 回顾路由模式在路由模式中,我们允许了消费者根据routing_key监听部分的消息,即生产者产生消息时定义消息的routing_key参数设置exchange类型为direct把队列绑定到exchange时定义其routing_key参数那么消费者就可以通过这个队列“订阅”到他所想要的数据2. 路由模式的局限性通过routing_key,可以筛选出部分数据,但往往需要多个字段才可以筛选出想要的消息,比如对于日志来说,我们想根据日志的等级(debug/info/warning/

2020-10-09 08:04:04 245

原创 RabbitMQ(三)路由模式 Python实现

1. 回顾发布/订阅模式在发布订阅模式中,exchange的类型设置为fanout, 所有提交到这个exchange的消息都会被推送到所有与之绑定的队列中如果希望把消息推送到一部分与该exchange绑定的队列,就要使用路由2. 路由在生产者产生消息时,通过如下代码把它提交给exchange:channel.basic_publish(exchange='logs', routing_key='', body=message)我们通过以下代码把一个队列绑定到一个exchange上:

2020-10-09 08:03:35 342

原创 RabbitMQ(二)发布/订阅模式 Python实现

1. Publish/Subscribe在work queue(工作队列)模式中,一个消息被一个消费者处理(一项工作被一个人完成)而使用发布/订阅,一个消息可以传递给多个消费者。2. Exchange当生产者产出消息时,它把消息提交给Exchange,而不是直接提交到队列中。Exchange再把消息分到不同的队列那么消息应该分发给哪个队列?一个还是多个队列?这是由Exchange的类型决定的2.1 Exchange的类型directtopicheadersfanout 把消息加

2020-10-09 08:03:16 514 1

原创 RabbitMQ(一)简单工作队列 Python实现

1. Work Queue模式工作流程Producer 生产消息,并把消息提交到ExchangeExchange把消息放入相应的Queue(队列)Cosumer监听队列,当有消息时取出并通过回调函数作处理2. 代码:2.1 基本实现以下是send.py 代表了Producerimport sysimport pikafrom credentials import credentialsmsg = ''.join(sys.argv[1:]) or "Hello World..

2020-10-09 08:02:59 195

原创 leetcode 96. 不同的二叉搜索树 (暴力搜索->动态规划)

题目:解题思路阅读左神算法书动态规划章节“机器人行走的步数”一题有感,我们对这类问题可以从暴力解法逐步找到动态规划的解法首先,序列1,2,…,n是一个升序序列,可以认为是一棵搜索二叉树的中序序列,因此:我们迭代的把每个数当作是根节点,求它的左右子树分别有几种组合,相乘即可,比如N为5,根节点为3时,求左子树[1,2],右子树[4,5]的组合数相乘,叠加到最后结果当然如果一个子树为空,当前组合数就是另一棵子树的组合数这是一个递归过程,写出如下代码:def numTreesEnum(

2020-10-01 17:29:02 146

原创 leetcode 组合总和系列问题(Python实现)

问题描述“组合总和”问题就是给定一个数组和一个目标数字,求出数组中的和为这个目标数字的子数组的集合。这类问题本质就是使用“回溯”的方法解决,但因为设定条件的不同,解法上有一定差异。leetcode上目前有4个“组合总和”问题,下面一一介绍它们的解法leetcode 39. 组合总和给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。其中,candidates中的数字可以被重复选取也就是说当c

2020-10-01 16:27:53 573

原创 HTTP访问控制(CORS)

CORS(Cross Origin Resource Sharing)以下内容参考自:MDN web docs是什么:使用额外的HTTP头使得运行在一个域上的Web应用被准许访问来自不同源服务器上的指定的资源。当一个资源与该资源本身所在不同的域、协议或端口请求一个资源时,资源会发起一个跨域HTTP请求CORS 首部字段Access-Control-Allow-Origin指示请求的资源能共享给哪些域。Access-Control-Allow-Credentials指示当请求的凭证

2020-08-28 10:07:20 553

原创 Redis基础数据结构——ziplist压缩表

是什么ziplist是一个基于双端链表的可以节省内存的数据结构。它可以存储整型和字符串类型的数据,整型被编码成真正的整数类型而不是字符串,因此节省了内存添加和删除操作可以在首尾两端进行,时间复杂度O(1)。但是,因为每个操作涉及内存的重新分配,所以实际的复杂度取决于压缩表的大小结构一个压缩表的结构是这样的:<zlbytes> <zltail> <zllen> <entry> <entry> ... <entry>

2020-08-24 22:16:58 172

原创 Python3.9 中的一些特性

PEP 584 使用 | 和|= 符号取字典的并集为什么需要这个新特性:合并字典的现有方法:# 1. 合并d1, d2, 用inplace的方式修改了字典d1d1.update(d2) # 2. 如果不想修改d1,就采用下面的代码:把d1复制到一个新字典,再对新字典使用update()方法e = d1.copy()e.update(d2)# 3. 或者是这样,但比较丑陋,且不易理解:{**d1, **d2}# 4. 使用collections.ChainMap, 对新字典

2020-08-12 22:20:24 298

原创 Python Cookbook第三版学习笔记【第10章】

第10章 模块和包10.1 把模块按层次结构组织成包把代码在文件系统上进行组织,确保每一个目录下定义一个__init__.py文件当模块被导入时,它所属的包的__init__.py就会被触发执行init.py可以留空,也可以用来进行子模块的加载10.2 对所有符号的导入进行精确控制使用from module import * 可以导入模块中的所有符号可以在模块中定义__all__变量(列表),就可以控制可被导入的符号,例如:在一个模块中:def foo(): print("

2020-07-27 21:49:04 151

原创 Python Cookbook第三版学习笔记【第七章】

第7章7.1 编写可接受任意数量参数的函数接受任意数量的位置参数,以"*"开头:def get_sum(*nums): return sum(nums)用以下的方式都可调用:>>> get_sum(1,2,3)6>>> get_sum(*[1,2,3,4])10接受任意数量的关键字参数,以“**”开头:def get_sum(**kwargs): return kwargs['a'] + kwargs['b']用以

2020-06-28 18:06:00 241

原创 Python Cookbook第三版学习笔记【第五章】

第五章 文件和I/O5.1 读写文本数据一般以with…as…关键字及open函数进行文件读写,with语句结束后,文件自动关闭,不必调用f.close():with open('abc.txt', mode, encoding=encoding) as f: passmode就是读写模式,对于文本文件可以为’rt’(读), ‘wt’(写), ‘at’(追加),encoding为编码方式。在文件读取时,可能会发生编码错误:UnicodeDecodeError: 'ascii'

2020-06-15 20:28:40 182

原创 Django CBV: 表单处理

CBV参考链接:https://docs.djangoproject.com/en/3.0/topics/class-based-views/generic-editing/ (Django官方文档)CBV即Class Based View, 即通过class来构建视图。有别于FBV(Function Based View),通过使用类继承和mixins,CBV的代码重用性更高,需要自己实现的代码更少当用户提交数据时、在将数据存入数据库之前,需要进行表单验证,以下将介绍表单(Form)和CBV

2020-06-15 15:03:32 198

原创 Python Cookbook第三版学习笔记【第四章】

第四章 迭代器和生成器4.1 手动访问迭代器中的元素使用next()函数,当迭代器迭代结束时会抛出StopIteration异常,手动对异常进行捕获a = [1,2,3]b = iter(a)try: while True: print(next(b))except StopIteration: pass也可以给next()函数传入一个结束值,在迭代结束时返回这个值,就可以换成这种写法:while True: curr_val = next(b, None)

2020-06-08 20:14:41 238

原创 Python Cookbook第三版学习笔记【第三章】

第三章 数字、日期和时间3.1 对数值进行取整使用round(value, ndigits) 可以使一个浮点数取整到一个小数位:# 取小数点后两位round(3.1415926, 2)如果一个浮点数恰在两个整数正中间,则会取整到相邻的偶数。如对1.5, 2.5求整都会得到2如果ndigits为负数,如-1,-2,-3 则相应的取整到十位,百位,千位(0就是个位)3.2 执行精确的小数计算一般的浮点数具有误差(由于CPU的浮点运算单元和IEEE 754浮点数算数标准的特性):&

2020-05-31 22:31:25 410

原创 Python Cookbook第三版学习笔记【第二章】

第二章:字符串和文本2.1 针对任意多的分隔符拆分字符串如果分隔符只有一种,容易使用str.split(seperator)进行分隔如果分隔符有多种,例如在一个句子中,单词之间存在多种分隔符:s = 'I had eggs for breakfast, what about you~ Susan?'想要取出所有单词,使用re.split()# '[,~\s]'指定了分隔符,后面的'\s*'表示任意数量的空格res = re.split(r'[,~\s]\s*', s)结果:

2020-05-25 21:45:26 193

原创 使用Trix富文本编辑器:添加文字的颜色属性

trix是一个Web上的比较简易的富文本编辑器, 它的基础界面看起来是这样的, 可以完成一些基本操作(加粗、斜体、列表、插入附件、do/undo等):trix的github网址:https://github.com/basecamp/trix可以在github中下载trix的源码,并在html中导入dist目录下的trinx.js和trinx.css:<link rel="stylesheet" type="text/css" href="static/trix/dist/trix.css"&

2020-05-22 16:58:37 1150

原创 Python Cookbook第三版学习笔记【第一章】

第一章:数据结构和算法1.1 将序列分解为单独的变量任何可迭代对象都可以分解为单独的变量,如:p = (4, 5)x, y = p如果要丢弃某些特定的值,则使用用不到的变量代表该值,如:person = [1, "jimmy", 22, "china"]_, name, age, _ = person 1.2 从任意长度的可迭代对象中分解元素使用"*表达式",如:>>> person = [1, "jimmy", 22, "china"]>&g

2020-05-16 23:44:26 350

原创 安装django-bootstrap-modal-forms出错解决方法

在Windows环境中,安装django-bootstrap-modal-forms出现如下错误pip install django-bootstrap-modal-formsTraceback (most recent call last): File "setup.py", line 5, in <module> README = readme.read()Un...

2020-03-06 23:20:23 569 1

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除