gpt4 book ai didi

python - 如何使用不同的虚拟环境编排 Python 脚本

转载 作者:行者123 更新时间:2023-12-05 04:21:23 25 4
gpt4 key购买 nike

如何在多个虚拟环境中使用 Rocketry (Python)?我尝试使用 Rocketry 作为 Process Orchestrator(因为它比 Airflow 更容易,而且我不需要在不同的机器上运行)。

但我不知道如何运行使用不同 virtualenvs 的不同进程。

(火箭技术文档:https://github.com/Miksus/rocketry)

目前,我看到我以前可以运行一些脚本,但我认为它只能与 CLI 一起使用。

from rocketry import Rocketry
from rocketry.conds import daily, secondly

app = Rocketry()

@app.task(daily)
def do_daily(): # task from virtualenv A
...

@app.task(daily)
def do_secondly(): # task from virtualenv B
...


if __name__ == '__main__':
app.run()

最佳答案

这里是 Rocketry 的作者。我曾经想过在某个时候制作一个本地虚拟环境支持,但目前自己做也不难。有两种选择:

  1. 使用常规函数任务作为包装器
  2. 使用命令任务

请注意,我现在有 Windows,因此如果你使用不同的操作系统,你的 Python 解释器的位置与我的位置不同(我在 env/Scripts/python.exe 中)。

所以基本上这两个都会:

  1. 在一个环境/进程中运行实际的 Rocketry 应用
  2. 在单独的线程(或异步任务)中启动任务
  3. 使用 shell 命令调用您的脚本(此命令使用指定的虚拟环境调用您的脚本)

使用常规任务

import subprocess

app = Rocketry()

@app.task(daily, execution="thread")
def run_script():
subprocess.check_call(r'"env/Scripts/python.exe" C:/myscript.py')

从子流程中阅读更多信息:https://docs.python.org/3/library/subprocess.html .请注意,我使用了线程任务,因为使用 process 会启动不必要的额外子进程。还有一个异步子进程,您也可以使用它,然后根据需要设置 execution="async"

使用命令任务

app = Rocketry()

app.task(daily, command='"env/Scripts/python.exe" C:/myscript.py', execution="thread")

if __name__ == '__main__':
app.run()

还有一个参数cwd(目前似乎接受路径作为字符串)来更改当前工作目录。

命令任务似乎也使用默认执行,因此您可能还想在此处将其指定为 thread(更改默认值以便将来对命令任务更合理)。

关于python - 如何使用不同的虚拟环境编排 Python 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74228559/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com