在 django 和 pythonanywhere 中经常重复后台任务的最佳实践

Best practices for often repeating background tasks in django and pythonanywhere

因此,我目前正在开发一个托管在 pythonanywhere 上的 django 项目,其中包括通知功能,同时还通过 AWS 从传感器外部接收数据。为了实现这一点,我一直在思考最佳实践。

我目前有一个简单的实现,它是一个视图,它检查所有通知并在需要时根据需要执行操作,并带有一个始终在线的任务(这只是一个 运行 独立的脚本)发送每分钟向服务器发送一个 REST 请求。

服务器端:

views.py:

def checkNotifications(request):
    notificationsObject = notifications.objects.order_by('thing').values_list('thing').distinct()
    thingsList = list(notificationsObject)
    for thing in thingsList:
        valuesDic = returnAllField(thing)
        thingNotifications = notifications.objects.filter(thing=thing)
        #Do stuff for each notification

网址:

path('notifications/',views.checkNotifications,name="checkNotification")

客户端刚刚向我的 URL/notifications/ 发送了一个 GET 请求。哪个有效。

现在,在研究时我看到了一些其他选项,例如此处讨论的与 django 后台任务 and/or 芹菜:

Celery task best practices in Django/Python

以及其他一些选项。

我的问题是:从我的第一个实施转移到这个实施是否有好处?我可以直接看到的唯一好处是避免其他服务滥用试图点击我的 URl 来频繁检查通知,但我 can/have 需要身份验证来避免这种情况。而且,考虑到我经常检查这个重复任务,是否有关于此的某种“最佳实践”,几乎感觉应该有更多 proper/cleaner 解决方案。首先,我不确定 运行 重复任务是否是 pythonanywhere 的最佳选择。 (https://help.pythonanywhere.com/pages/AsyncInWebApps/建议使用永远在线的任务,但也提到了django后台任务)

谢谢

要在 PythonAnywhere 上使用 Django 后台任务,您需要运行它使用永远在线的任务,所以它不是替代方案,只是永远在线任务的另一种用法。

您还可以使用某种长运行ning 管理命令直接访问始终在线任务中的 Django 代码,因此您无需通过特殊请求访问 Web 应用程序。