没有命令的Django后台任务

Django Background Tasks Without command

我是 Django 和 django-background-tasks 包的新手。

我遇到一个问题,我无法 do/start 后台任务,除非我强行 运行 命令 process_tasks ,即 python manage.py process_tasks。我想在没有 运行 process_tasks 命令的情况下 do/start 后台任务。

我正在创建 rest api。所以我想 运行 自动执行后台任务,而不用编写命令。 这怎么可能。 ? 我找到了一个代码。那就是下面显示的..但是我没有得到我把代码放在哪个文件中。

from django.core.management import call_command

call_command('process_tasks')

这是我的task.py

@background(schedule=60)
def rfid_sync(empid):
    try:
        print("Process start")
        emp = Employee.objects.get(EmployeeId=1)
        div = Device.objects.get(DeviceId=1)
        sync = Synchronization(
            Employee=emp,
            Device=div,
            SyncType=1
        )
        sync.save()
    except Exception as ex:
        logging.getLogger("error_logger").exception(repr(ex))

我正在从我的 views.py

调用任务
def proces_add(request):
   emp=Employee.objects.get(EmployeeId=request.data.get("Emp"))
   rfid_sync(emp.EmployeeId)

首先,我想说我更喜欢使用命令 python manage.py process_tasks 运行 来执行任务,原因有几个,其中两个值得一提:

  1. 它与 django 命令相关联,因此如果您的应用程序有问题,停止 process_tasks 也是有意义的。
  2. 根据第一个原因,只要您的应用运行正常,您可能希望保留 process_tasks 运行。因此,不应编写另一个脚本来调用 process_tasks.

话虽如此,如果您真的想避免手动打开终端并调用命令行,我建议您在调用之前使用 subprocess 调用 python manage.py process_tasks 来实现一个函数后台任务。

import subprocess
import shlex

def process_tasks():
    process_tasks_cmd = "python manage.py process_tasks --duration 60"
    process_tasks_args = shlex.split(process_tasks_cmd)
    process_tasks_subprocess = subprocess.Popen(process_tasks_args)

def proces_add(request):
   emp=Employee.objects.get(EmployeeId=request.data.get("Emp"))
   process_tasks()
   rfid_sync(emp.EmployeeId)