我正在使用芹菜 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) 我想使用 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 安装软件包的测试步骤?