引言
在前几篇文章中,我们介绍了Python在文件处理、定时任务、网络请求、邮件发送、数据处理、并发编程、数据库交互、自动化测试、机器学习、系统监控及运维等方面的应用。本文将进一步深入,探讨如何使用Python进行任务调度、资源优化、以及结合DevOps工具链实现持续集成和持续部署(CI/CD)等高级功能。
十九、任务调度与优化
19.1 使用Celery进行分布式任务调度
Celery
是一个强大的分布式任务队列系统,适用于处理大量异步任务。首先安装该库:
pip install celery redis
以下是一个简单的例子,展示如何使用Celery进行任务调度。
from celery import Celery
# 创建Celery实例
app = Celery('tasks', broker='redis://localhost:6379/0')
@app.task
def add(x, y):
return x + y
if __name__ == "__main__":
# 启动Celery worker
app.worker_main()
启动Redis服务器并运行Celery worker后,可以通过以下方式提交任务:
from tasks import add
# 提交任务
result = add.delay(4, 4)
print(result.get(timeout=1))
19.2 资源优化
为了提高任务执行效率,可以对任务进行优先级设置和批量处理。以下是一个简单的例子,展示如何设置任务优先级。
@app.task(priority=5) # 设置优先级为5
def high_priority_task():
print("High priority task is running")
@app.task(priority=1) # 设置优先级为1
def low_priority_task():
print("Low priority task is running")
if __name__ == "__main__":
# 提交任务
high_priority_task.delay()
low_priority_task.delay()
二十、持续集成与持续部署(CI/CD)
20.1 使用Jenkins进行CI/CD
Jenkins 是一个广泛使用的开源自动化服务器,支持构建、测试和部署应用。以下是一个简单的步骤说明,展示如何使用Jenkins进行CI/CD。
- 安装Jenkins:
- 下载并安装Jenkins:Jenkins官网
- 启动Jenkins服务。
- 配置Jenkins Job:
- 打开Jenkins Web界面,创建一个新的自由风格项目。
- 配置源码管理(如Git),输入仓库地址和凭证。
- 添加构建触发器(如定期轮询SCM或通过Webhook触发)。
- 添加构建步骤(如执行Shell脚本或调用Python脚本)。
- 编写构建脚本:
- 在项目的根目录下创建一个
Jenkinsfile
,定义构建流程。
pipeline {
agent any
stages {
stage('Build') {
steps {
sh 'python setup.py build'
}
}
stage('Test') {
steps {
sh 'pytest tests/'
}
}
stage('Deploy') {
steps {
sh './deploy.sh'
}
}
}
}
20.2 使用GitHub Actions进行CI/CD
GitHub Actions 是GitHub提供的自动化平台,支持构建、测试和部署工作流。以下是一个简单的例子,展示如何使用GitHub Actions进行CI/CD。
- 创建
.github/workflows/ci.yml
文件:
name: CI Pipeline
on:
push:
branches:
- main
pull_request:
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v2
with:
python-version: '3.x'
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
- name: Run tests
run: pytest tests/
- name: Deploy to production
if: github.ref == 'refs/heads/main'
run: |
./deploy.sh
- 编写部署脚本:
创建一个简单的部署脚本
deploy.sh
,用于部署到生产环境。
#!/bin/bash
echo "Deploying to production..."
scp -r . user@your-server:/path/to/deploy
ssh user@your-server 'cd /path/to/deploy && python setup.py install'
二十一、综合案例:完整的CI/CD流水线
假设我们需要构建一个完整的CI/CD流水线,包括任务调度、资源优化、以及使用GitHub Actions进行持续集成和持续部署。以下是完整的代码示例:
from celery import Celery
import time
# 创建Celery实例
app = Celery('tasks', broker='redis://localhost:6379/0')
@app.task(priority=5)
def high_priority_task():
print("High priority task is running")
time.sleep(5)
@app.task(priority=1)
def low_priority_task():
print("Low priority task is running")
time.sleep(5)
if __name__ == "__main__":
# 提交任务
high_priority_task.delay()
low_priority_task.delay()
# Jenkinsfile 示例
"""
pipeline {
agent any
stages {
stage('Build') {
steps {
sh 'python setup.py build'
}
}
stage('Test') {
steps {
sh 'pytest tests/'
}
}
stage('Deploy') {
steps {
sh './deploy.sh'
}
}
}
}
"""
# deploy.sh 示例
"""
#!/bin/bash
echo "Deploying to production..."
scp -r . user@your-server:/path/to/deploy
ssh user@your-server 'cd /path/to/deploy && python setup.py install'
"""
# GitHub Actions workflow 文件 (.github/workflows/ci.yml)
"""
name: CI Pipeline
on:
push:
branches:
- main
pull_request:
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v2
with:
python-version: '3.x'
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
- name: Run tests
run: pytest tests/
- name: Deploy to production
if: github.ref == 'refs/heads/main'
run: |
./deploy.sh
"""
结论
通过上述内容,我们展示了如何使用Python进行复杂的任务调度与优化,以及结合DevOps工具链实现持续集成和持续部署(CI/CD)。