gpt4 book ai didi

python - 从函数返回并继续执行

转载 作者:行者123 更新时间:2023-11-30 23:49:48 25 4
gpt4 key购买 nike

我正在开发一个 Django 应用程序,我想在首次创建对象时填充模型中的多个字段。目前,我可以在模型的 save() 例程中执行此操作,如下所示:

def save(self, *args, **kwargs):
file = fileinfo.getfileinfo(self.file_path)
if not self.file_size:
self.file_size = file.FileSize
if not self.file_inode:
self.file_inode = file.FileInode
if not self.duration:
self.duration = file.Duration
if not self.frame_width:
self.frame_width = file.ImageWidth
if not self.frame_height:
self.frame_height = file.ImageHeight
if not self.frame_rate:
self.frame_rate = file.VideoFrameRate
super(SourceVideo, self).save(*args, **kwargs)

我在名为 fileinfo 的单独模块中创建了一个名为 getfileinfo 的函数。这是我的函数的一部分:

def getfileinfo(source):
fstats = os.stat(source)
info = dict({
u'FileSize': fstats.st_size,
u'FileInode': fstats.st_ino
})
output = subprocess.Popen(
[exiftool, '-json', source], stdout=subprocess.PIPE)
info.update(
json.loads(output.communicate()[0], parse_float=decimal.Decimal)[0])
return DotDict(info)

尽管所有这些都有效,但我希望避免在检索过程因某种原因延迟时阻止保存过程。在对象创建时不需要该信息,并且可以在之后不久填充。我的想法是,我将更改我的函数以接受有问题的文件路径以及作为对象的主键。有了这些信息,我就可以获取该信息,然后以单独的操作更新我的对象条目。

类似于:

def save(self, *args, **kwargs):
fileinfo.getfileinfo(self.file_path, self.id)
super(SourceVideo, self).save(*args, **kwargs)

我需要帮助的是如何在函数实际完成之前从函数返回。我想调用该函数,然后只要正确调用它就不会返回任何内容。然而,该函数应该继续运行,然后在完成后更新其末尾的对象。如果我需要澄清一些事情,请告诉我。另外,这还有工作吗?

谢谢

最佳答案

在这种情况下,最好的选择是使用 celery .

这使您能够创建将在后台发生的任务,而不会阻止当前请求。

在您的情况下,您可以 .save(),创建更新字段的任务,将其推送到您的 celery 队列,然后将所需的响应返回给用户。

关于python - 从函数返回并继续执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7508009/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com