如何在 Windows PC 上定期运行一些 Python 脚本?

3

我有一些Python脚本,希望从Windows电脑上每天运行。

我目前的工作流程如下:

  1. 桌面PC每天保持开机状态,除了周末的定期重启
  2. 重启后,我打开VS Code并运行一个小型bash脚本./start.sh来启动任务。

上述方法基本可行,但也相当麻烦。如果我关闭VS Code(例如进行更新),我需要重新运行 start.sh。此外,进程使用一些本地Python库,因此如果要更新它们,我需要停止它们。

关于如何正确实现这一点,我想到了4个工具:

  1. Windows计划任务
  2. Airflow
  3. Prefect (https://www.prefect.io/)
  4. Rocketry (https://rocketry.readthedocs.io/en/stable/)

然而,我无法理解一个根本性问题,即Prefect/Airflow/Rocketry在我的PC上运行,然后重启PC后没有任何东西会重新启动它们。我也不确定它们是否能为我提供我所需的工具隔离。

想到了Docker,我可以将每个任务放入一个Docker映像中,并通过某种形式的Docker集群运行它们。但不确定是否重复造轮子。

我100%确定我不是第一个遇到这种情况的人。有没有人能指点一下如何做得好的指南?

注意:

  • 我不考虑在云中运行Python脚本。它们与仅为我的PC许可的本地工具进行交互。

你可以将这些程序的快捷方式添加到自启动文件夹中。 - AlexNe
我不需要某种bash命令吗?我认为我不能只链接“app.py”。在我的bash脚本中,我有{PYTHON路径}/python.exe app.py - MYK
3个回答

2
听起来火箭技术也可能是合适的。火箭技术可以使用任务关闭自身。您可以执行以下任务:
  1. 在主线程和进程上运行(阻止启动新任务)

  2. 等待或终止所有当前运行的任务(使用会话)

  3. 调用session.shut_down(),该方法将向调度程序设置标志。

    还有一个应用程序配置shut_cond,它只是一个条件。如果此条件为True,则调度程序退出,因此您也可以使用此选项。

然后,在app.run()之后,您只需使用子进程库运行shutdown -r(重新启动)命令即可。然后,当重启完成时,您需要启动Rocketry。为此,也许这个答案可以帮到您:https://superuser.com/a/954957,或者使用Windows计划程序来启动一个简单的启动任务以启动Rocketry。
特别是如果你有Linux机器(例如树莓派),你可以将Rocketry与FastAPI集成,并创建一个小型集群,在其中Rocketry应用程序彼此通信,只需将带有Rocketry的脚本作为启动服务即可。一台机器可以作为备份,调用另一台机器的API来运行Linux重启命令。然后备份执行任务,直到主要机器再次响应请求(正常运行)。
但作为库的作者,我可能对自己的项目持有偏见。但Rocketry在复杂调度问题上非常有能力,这就是该项目的目的。

2
您可以完全使用Prefect进行此操作 - 它非常轻量级,似乎符合您的要求。您可以使用pip install prefect安装它,启动Orion API服务器:prefect orion start,一旦您创建了一个Deployment并启动了代理prefect agent start -q default,甚至可以从UI配置计划
有关Deployments的更多信息,请查看我们的FAQ部分

1
这听起来不错,我会尝试一下,如果有效的话就接受这个答案。 - MYK
1
@Anna Geller,当你说“我们的常见问题解答”时,这是否意味着你与你推荐的库有任何关联? - sourcream

0

你可以使用Windows的schtasks来安排任务,例如运行bash脚本或Python脚本,而且它非常可靠。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接