我试图在单击按钮时裁剪图像(数千张图像),这是我的代码!
@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 %}
提前感谢
答案 0 :(得分:0)
为什么不编写命令行脚本/工具-您可以使用cron作业运行它?
该脚本应具有逻辑,可以完成哪些图像,哪些图像处于待处理状态或哪些图像正在处理中。
可能-让Django显示此脚本的状态:正在运行,正在睡眠,已完成工作等。
答案 1 :(得分:0)
使用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 how to initialize