掘金 后端 ( ) • 2024-05-08 19:22

highlight: a11y-dark

由于本人之前是写node.js开发后端项目的,现在要接手同事的python项目,别急,问题不大,语言不是障碍。读完这篇文章,让你快速上手python。

安装python运行环境

在 macOS 上,Python 版本是系统的一部分,直接替换系统默认的 Python 版本可能会导致系统功能受影响,所以不建议直接替换系统 Python 版本。但可以安装另一个 Python 版本,并通过别名或者虚拟环境来使用它。

以下是安装 Python 3.8 并设置为默认版本的一种方法:

  1. 安装 Python 3.8

    首先,确保你已经下载了 Python 3.8 的安装程序。你可以从 Python 官方网站(https://www.python.org/downloads/)下载对应 macOS 的 Python 3.8 安装包。

    安装完成后,你可以使用以下命令验证 Python 3.8 是否已经成功安装:

    python3.8 --version
    
  2. 创建别名

    打开 Terminal,并编辑你的 Shell 配置文件(通常是 ~/.bash_profile~/.zshrc),在文件末尾添加一行:

    alias python=python3.8
    

    保存文件并重新启动 Terminal。现在,当你在 Terminal 中运行 python 命令时,将会使用 Python 3.8。

  3. 使用虚拟环境

    另一种常见的做法是使用虚拟环境来管理项目的 Python 版本。你可以为每个项目创建一个独立的虚拟环境,并在其中安装特定版本的 Python 和所需的依赖项。这样可以确保每个项目都可以使用所需的 Python 版本和依赖项,而不会相互干扰。

    你可以使用 venv 工具或者第三方工具(如 virtualenv)来创建虚拟环境,具体步骤与前面提到的类似。

这些方法中,创建别名的方式可能更为简单,但你也可以根据个人偏好选择其他方法。请注意,修改系统默认的 Python 版本可能会对系统的正常运行产生影响,所以在进行操作之前请务必小心。

启动python项目

首先,使用 virtualenv 创建虚拟环境并启动项目的步骤如下:

  1. 安装 virtualenv(如果尚未安装):
pip install virtualenv
  1. 创建虚拟环境

在项目目录中,使用 virtualenv 创建一个新的虚拟环境。假设你的项目目录名为 my_project,可以执行以下命令:

cd my_project
virtualenv venv

这将在项目目录中创建一个名为 venv 的新虚拟环境。

  1. 激活虚拟环境

在 Unix/Linux/macOS 系统中,执行以下命令激活虚拟环境:

source venv/bin/activate

在 Windows 系统中,执行以下命令:

venv\Scripts\activate

激活虚拟环境后,你会看到命令行提示符前面有一个环境名称(通常是 (venv))。

  1. 安装项目依赖项

在虚拟环境中使用 pip 安装项目所需的所有依赖项。假设你的依赖项列表存储在 requirements.txt 文件中,可以执行以下命令:

pip install -r requirements.txt
  1. 运行项目

一旦所有依赖项都安装完成,你可以在虚拟环境中直接运行项目。例如,如果你的项目入口文件为 main.py,可以执行以下命令启动项目:

python main.py
  1. 退出虚拟环境

当你完成项目工作后,可以通过以下命令退出虚拟环境:

deactivate

这样就可以退出虚拟环境,回到系统的全局 Python 环境中。

通过这些步骤,你可以使用 virtualenv 创建虚拟环境,并在其中启动你的项目。这有助于隔离项目的依赖项,使得不同项目之间的依赖关系不会相互干扰。

Celery 开发后端接口

由于我接手的项目中用到了celery,首先我们要知道它的原理和用法,才能更好的处理高并发业务。 Celery 是一个基于分布式消息传递的任务队列,用于处理大规模的异步任务。其原理涉及以下几个核心组件和概念:

  1. 消息代理(Message Broker): Celery 使用消息代理来传递任务消息。消息代理通常是一个可靠的消息队列,如 RabbitMQ、Redis、Amazon SQS 等。当应用程序调用 Celery 任务时,任务被序列化为消息并发送到消息代理中,然后被 Celery worker 进程消费并执行。

  2. 任务(Task): 任务是由 Celery 定义和执行的异步工作单元。任务通常是简单的 Python 函数或方法,使用 @celery.task 装饰器进行装饰。当应用程序调用任务时,Celery 将任务封装成消息并发送到消息代理中,然后由 Celery worker 进程异步执行任务。

  3. Celery Worker: Celery Worker 是一个独立的进程,负责从消息代理中获取任务消息并执行任务。Celery Worker 进程可以在一个或多个计算机节点上运行,通过消费消息队列中的任务消息来实现分布式任务处理。

  4. 结果后端(Result Backend): 任务执行完成后,Celery Worker 将执行结果返回给应用程序。结果后端是一个持久化存储,用于存储任务执行结果。常见的结果后端包括 Redis、数据库、文件系统等。应用程序可以通过结果后端获取任务执行状态和结果。

  5. 调度器(Scheduler): Celery 还包含一个可选的调度器组件,用于定时执行任务。调度器定期发送任务消息到消息代理中,以触发任务的执行。常见的调度器包括 Celery Beat。

Celery 的工作流程如下:

  • 应用程序调用 Celery 任务时,任务被序列化为消息并发送到消息代理中。
  • Celery Worker 进程从消息代理中获取任务消息,并执行任务。
  • 执行结果被返回到结果后端,并通过结果后端提供的接口返回给应用程序。

通过这种方式,Celery 提供了一个灵活可靠的方式来处理异步任务,支持大规模的任务处理和分布式部署。 使用 Celery 快速开发后端接口通常涉及以下步骤:

  1. 安装 Celery: 在你的 Python 环境中安装 Celery:

    pip install celery
    
  2. 创建 Celery 任务: 创建一个或多个 Celery 任务来执行后台任务。任务可以是简单的函数,使用 @celery.task 装饰器进行装饰。

    from celery import Celery
    
    app = Celery('tasks', broker='redis://localhost:6379/0')
    
    @app.task
    def add(x, y):
        return x + y
    
  3. 配置 Celery: 配置 Celery 使用的消息代理和其他参数。通常将配置保存在一个单独的文件中。

    # celeryconfig.py
    
    broker_url = 'redis://localhost:6379/0'
    result_backend = 'redis://localhost:6379/0'
    
  4. 启动 Celery worker: 在终端中使用 celery -A your_module_name worker --loglevel=info 命令启动 Celery worker。确保替换 your_module_name 为你的模块名称。

  5. 调用 Celery 任务: 在你的应用程序中调用 Celery 任务,可以通过导入任务函数并直接调用,也可以使用 delay() 方法异步调用任务。

    from your_module_name import add
    
    # 同步调用任务
    result = add.delay(4, 4)
    print(result.get())
    
    # 异步调用任务
    add.delay(4, 4)
    
  6. 监控任务执行: 使用 Celery 提供的工具监控任务的执行情况,包括任务状态、结果等信息。

    celery -A your_module_name inspect active
    celery -A your_module_name inspect scheduled
    

通过以上步骤,你可以快速使用 Celery 开发后端接口,并执行后台任务。Celery 提供了强大的分布式任务队列功能,能够帮助你实现异步任务处理、定时任务等功能。

读这篇之前,如果你是纯前端的同学,建议顺便读一下我的其它文章,了解一下后端常用的数据库和中间件,才能更好的使用和理解后端的各种分布式服务。很多时候,原理是相通的

想学高并发技能,这些常用的消息中间件( RabbitMQ、Kafka、ActiveMQ、Redis、NATS )要知道(https://juejin.cn/post/7350654839518822434)

盘点那些常用的数据库以及各自的原理和特点,简单明了的说一下(https://juejin.cn/post/7350602010906279936)