在 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 应用程序。
因此,我目前正在开发一个托管在 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 应用程序。