J'utilise flask
框架,图片处理用的是pillow
.
Généralement, le téléchargement se fait dans une logique de compression en bouclefiles
,然后逐个file.save()
我希望在save
完成后,执行pillow
.
Mais il semblesave
是一个I/O操作,存在延迟性,如果直接在file.save()
下面直接调用pillow
的Image.open
qu'une erreur se produira car les données de l'image n'ont pas été écrites dans l'image.
Que faire ?
Vous voyez que l'opération de sauvegarde n'est pas asynchrone
Mise à jour
copyfileobj est une opération bloquante
En fait, pour ce type de traitement d'image, il est préférable d'utiliser directement OSS ou Qiniu d'Alibaba Cloud et d'autres fonctions de stockage similaires, puis de télécharger directement l'image sur OOS, puis d'appeler un suffixe spécial pour le traitement d'image spécifié. vous accéderez également à OSS pour le traitement de l'adresse. Cela peut non seulement éviter la charge liée à l'utilisation de votre propre serveur pour traiter les images, mais également réduire la pression d'accès, ce qui est également très bénéfique pour réduire la complexité du programme.
Veuillez jeter un œil au paramètre fp de Image.open. Vous pouvez également utiliser un nom de fichier (chaîne), un objet pathlib.Path ou un objet fichier PIL.Image.open(fp, mode='r')
Vous pouvez simplement transmettre le fichier à Image.open(file) directement !