没有命令的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
运行 来执行任务,原因有几个,其中两个值得一提:
- 它与 django 命令相关联,因此如果您的应用程序有问题,停止 process_tasks 也是有意义的。
- 根据第一个原因,只要您的应用运行正常,您可能希望保留 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)
我是 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
运行 来执行任务,原因有几个,其中两个值得一提:
- 它与 django 命令相关联,因此如果您的应用程序有问题,停止 process_tasks 也是有意义的。
- 根据第一个原因,只要您的应用运行正常,您可能希望保留 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)