小编Mat*_*let的帖子

如何动态改变芹菜节拍的时间表?

我正在使用芹菜 4.3.0。我正在尝试根据 json 文件中的时间表每 5 秒更新一次 celery beat 的时间表,以便当我手动编辑、添加或删除该 json 文件中的计划任务时,celery beat 会获取更改调度程序而无需重新启动它。

我尝试的是创建一个任务,通过更新app.conf['CELERYBEAT_SCHEDULE']. 该任务每 5 秒成功运行一次,但 celery beat 不会更新到新的计划,即使我设置beat_max_loop_interval为 1 秒。

任务.py

from celery import Celery

app = Celery("tasks", backend='redis://', broker='redis://')
app.config_from_object('celeryconfig')

@app.task
def hello_world():
    return "Hello World!"

@app.task
def update_schedule():
    with open("path_to_scheduler.json", "r") as f:
        app.conf['CELERYBEAT_SCHEDULE'] = json.load(f)
Run Code Online (Sandbox Code Playgroud)

芹菜配置文件

beat_max_loop_interval = 1  # Maximum number of seconds beat can sleep between checking the schedule

beat_schedule = {
    "greet-every-10-seconds": {
        "task": "tasks.hello_world",
        "schedule": 10.0
    }, …
Run Code Online (Sandbox Code Playgroud)

python scheduled-tasks job-scheduling celery celerybeat

6
推荐指数
0
解决办法
2096
查看次数

在 Cloud Build 流水线中运行 Python 测试的好做法是什么?

我想使用 google Cloud Build 创建一个 CI/CD 管道,以将 python 网络应用程序部署到 App Engine。我有一个tests.py使用一些第三方库来运行一些测试的文件。我希望 Cloud Build 在 App Engine 上部署应用程序之前运行测试。为了实现这一点,我创建了这个cloudbuild.yaml文件,它lib在 /workspace 工作目录的文件夹中安装了一些带有 pip 的包,运行测试,并在应用引擎上部署应用程序:

steps:
  - name: "docker.io/library/python:3.7"
    args: ['pip', 'install', '-t', '/workspace/lib', '-r', 'requirements.txt']
  - name: 'docker.io/library/python:3.7'
    args: ["python", "tests.py"]
  - name: 'gcr.io/cloud-builders/gcloud'
    args: ['app', 'deploy']
Run Code Online (Sandbox Code Playgroud)

但是,我很难从tests模块的导入语句中访问 pip 在 /workspace/lib 中安装的包,因为 /workspace/lib 不在 $PATH 环境变量中。我没有找到从这个配置文件访问云构建器上下文的 PATH 环境变量的方法,所以我现在正在做的是将 /workspace/lib 添加到带有 sys.path 的 python 文件开头的路径中。路径指令。

import sys
sys.path.append("/workspace/lib")
Run Code Online (Sandbox Code Playgroud)

是否有更好的方法在 Cloud Build 中运行需要使用 pip 安装软件包的测试步骤?

python continuous-integration google-cloud-build

5
推荐指数
1
解决办法
612
查看次数