安排 Python 函数的执行
Schedule the execution of a Python function
我正在构建一个网络应用程序,我有一个日历,用户可以在其中选择未来的一天和一个小时并安排任务。计划任务是 python 中的一个简单函数,将在用户选择的确切日期和时间调用。
我遇到了 schedule 包,但我很快明白它不适合我的目标,因为他们明确表示如果你需要工作持久性和本地化,我不应该使用它,我肯定需要。
由于我的需要,我想我需要使用某种 OS cron,例如 Linux 上的 crontab。问题是我不需要让我的函数在每个给定的时间间隔执行,而只在用户选择的给定时间执行。
除了crontab还有其他解决方案吗?我看过 python-crontab 包,但它似乎能够执行命令,但不能直接在 Python 文件上真正起作用。
有什么想法吗?
PS 我正在使用 Django,我已经看到了 django-crontab 包,但它对我来说似乎太静态了,因为我需要动态 cron 作业才能 add/remove
所以,最后,我的解决方案是使用 python-crontab,如下所示:
python_exec_command = 'python ' + __file__ + ' ' + playlist_id + ' ' + username
python_folder = str(Path(__file__).resolve().parent.parent) + '/venv/bin/'
command = 'source ' + python_folder + 'activate && ' + python_exec_command + ' && deactivate'
cron = CronTab(user='nicola')
job = cron.new(command=command, comment=playlist_id)
job.minute.on(minute)
job.hour.on(hour)
job.month.on(month)
job.day.on(day)
cron.write()
这将启动以下脚本
def main(playlist_id, username):
# run the actual update
cron = CronTab(user='nicola')
cron.remove_all(command=playlist_id)
cron.write()
pass
if __name__ == "__main__":
playlist_id = sys.argv[1]
username = sys.argv[2]
main(playlist_id, username)
所以通过这种方式,我可以使用参数并在执行检查唯一 ID 作为评论后删除 cron
我正在构建一个网络应用程序,我有一个日历,用户可以在其中选择未来的一天和一个小时并安排任务。计划任务是 python 中的一个简单函数,将在用户选择的确切日期和时间调用。
我遇到了 schedule 包,但我很快明白它不适合我的目标,因为他们明确表示如果你需要工作持久性和本地化,我不应该使用它,我肯定需要。
由于我的需要,我想我需要使用某种 OS cron,例如 Linux 上的 crontab。问题是我不需要让我的函数在每个给定的时间间隔执行,而只在用户选择的给定时间执行。
除了crontab还有其他解决方案吗?我看过 python-crontab 包,但它似乎能够执行命令,但不能直接在 Python 文件上真正起作用。
有什么想法吗?
PS 我正在使用 Django,我已经看到了 django-crontab 包,但它对我来说似乎太静态了,因为我需要动态 cron 作业才能 add/remove
所以,最后,我的解决方案是使用 python-crontab,如下所示:
python_exec_command = 'python ' + __file__ + ' ' + playlist_id + ' ' + username
python_folder = str(Path(__file__).resolve().parent.parent) + '/venv/bin/'
command = 'source ' + python_folder + 'activate && ' + python_exec_command + ' && deactivate'
cron = CronTab(user='nicola')
job = cron.new(command=command, comment=playlist_id)
job.minute.on(minute)
job.hour.on(hour)
job.month.on(month)
job.day.on(day)
cron.write()
这将启动以下脚本
def main(playlist_id, username):
# run the actual update
cron = CronTab(user='nicola')
cron.remove_all(command=playlist_id)
cron.write()
pass
if __name__ == "__main__":
playlist_id = sys.argv[1]
username = sys.argv[2]
main(playlist_id, username)
所以通过这种方式,我可以使用参数并在执行检查唯一 ID 作为评论后删除 cron