[英]How to run Django background task only once
我正在嘗試在按鈕單擊下面裁剪圖像(數千個圖像),這是我的代碼!
@background(schedule=5)
def initialize():
allimages = []
number = 0
if not os.path.exists('thumbnails'):
os.makedirs('thumbnails')
path = '/Users/shoaibrafa/Data/*.jpg'
for image in glob.glob(path):
print(image,"=====",number)
im = Image.open(image)
im.thumbnail((512, 512), Image.ANTIALIAS)
im.save("thumbnails/" + os.path.basename(image), "JPEG")
number = number + 1
但是我面臨兩個問題:
當從模板中單擊按鈕時,類型為“ WSGIRequest”的對象不是JSON可序列化錯誤!
如果我在頁面加載時直接調用方法initialize(),則后台任務將開始裁剪圖像,但是當所有圖像都被裁剪后,它將再次從開始裁剪圖像開始並一直持續下去。 我需要裁剪圖像並結束后台任務。
波紋管是我的模板:
{% extends 'layout.html' %}
{% block title %} Login {% endblock %}
{% block content %}
<a class="btn btn-primary" href="{% url 'home:init'%}">Initialize...</a>
{% endblock %}
提前致謝
為什么不編寫命令行腳本/工具-您可以使用cron作業運行它?
該腳本應具有完成哪些圖像,哪些圖像處於待處理狀態或哪些圖像正在處理中的邏輯。
5月-讓Django顯示此腳本的狀態:正在運行,正在休眠,已完成工作等。
使用Django后台任務,您可以在創建任務之前檢查任務是否已經存在,因此您不會創建重復項
from background_task.models import Task
if not Task.objects.filter(verbose_name="my_task_name").exists():
tasks.my_task(verbose_name="my_task_name")
我在這里通過檢查任務是否已經創建來說明僅運行任務一次: Django + background-tasks如何初始化
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.