簡體   English   中英

如何僅一次運行Django后台任務

[英]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

但是我面臨兩個問題:

  1. 當從模板中單擊按鈕時,類型為“ WSGIRequest”的對象不是JSON可序列化錯誤!

  2. 如果我在頁面加載時直接調用方法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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM