分类标签归档:python

【置顶】DjangoBlog部署教程


本篇文章将会手把手教你如何部署DjangoBlog项目,首先介绍下我这里的基本环境,请大家仔细阅读此部分,下面的教程都会使用这些约定来介绍:

  • 系统是ubuntu 18.04 LTS
  • 假设你的域名是www.djangoblog.com
  • python虚拟环境目录在 ~/python/env
  • djangoblog源码位置在 ~/python/DjangoBlog
  • 登入用户server
  • 编辑器使用vim,你可以使用你喜欢的编辑器。

准备工作

升级系统

首先需要升级系统到最新版,终端下执行:

sudo apt update
sudo apt upgrade -y

待完成更新之后,建议重新

Read more

RabbitMQ学习笔记之(三) 发送方确认机制


上篇文章中,我们介绍了消费端的确认,那么在生产者有没有确认机制呢?答案是有的。 参考我们发送消息的代码段:

channel.basic_publish(exchange='testexchange', routing_key='hello', body='Hello World!{}'.format(i),
                          mandatory=True,
                          properties=pika.BasicProperties(
                  

Read more

RabbitMQ学习笔记之(二) 消费端的确认与拒绝


首先,我们先看下这样的业务场景,在消息发出后,Consumer接收到了生产者所发出的消息,但在Consumer突然出错崩溃,或者异常退出了,但是生产者消息已经发出来了,那么这个消息可能就会丢失,为了解决这样的问题,RabbitMQ引入了ack机制。 消费者在订阅队列时,可以指定autoAck参数,当autoAck等于false时,RabbitMQ会等待消费者显式地回复确认信号后才从内存(或者磁盘)中移去消息(实质上是先打上删除标记,之后再删除)。当autoAck等于true时,RabbitMQ会⾃自动把发送出去的消息置为确认, 然后从内存(或者磁盘)中删除,而不管消费者是否真正地消费到了这些

Read more

RabbitMQ学习笔记之(一) 基本概念介绍


基本介绍

RabbitMQ, 是一个使用erlang编写的AMQP(高级消息队列协议)的服务实现. 简单来说, 就是一个功能强大的消息队列服务.流程上来说,是发消息者(producer)把消息放到队列(queue)中去,然后收消息者(consumer)从队列中取出消息. RabbitMQ在这个基本概念之上, 多做了一层抽象, 在发消息者队列之间, 加入了交换器 (Exchange). 这样发消息者队列就没有直接联系, 转而变成发消息者把消息给交换器, 交换器根据调度策略再把消息再给队列
rabbitmq中几个比价重要的概念如下:

  • Producer,生产者,创建消息,然后发布到rabb

Read more

深入理解Python中的asyncio


asyncio介绍

熟悉c#的同学可能知道,在c#中可以很方便的使用asyncawait来实现异步编程,那么在python中应该怎么做呢,其实python也支持异步编程,一般使用asyncio这个库,下面介绍下什么是asyncio:

asyncio 是用来编写 并发 代码的库,使用async/await语法。 asyncio 被用作多个提供高性能Python异步框架的基础,包括网络和网站服务,数据库连接库,分布式任务队列等等。 asyncio 往往是构建 IO 密集型和高层级 结构化 网络代码的最佳选择。

asyncio中的基本概念

可以看见,使用asyncio库我们也可以在python代

Read more

python中的协程


先介绍下什么是协程:

  协程,又称微线程,纤程,英文名Coroutine。协程的作用,是在执行函数A时,可以随时中断,去执行函数B,然后中断继续执行函数A(可以自由切换)。但这一过程并不是函数调用(没有调用语句),这一整个过程看似像多线程,然而协程只有一个线程执行。

是不是有点没看懂,没事,我们下面会解释。要理解协程是什么,首先需要理解yield,这里简单介绍下,yield可以理解为生成器,yield item这行代码会产出一个值,提供给next(...)的调用方; 此外,还会作出让步,暂停执行生成器,让调用方继续工作,直到需要使用另一个值时再调用next()。调用方会从生成器中拉取值,但是

Read more