向长时间运行的Huey任务发送停止信号

2024-05-18 20:35:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用Huey对Django应用程序中的对象执行一些处理操作

@db_task()
def process_album(album: Album) -> None:
    images = album.objects.find_non_processed_images()

    for image in images:
        if album.should_pause():
            return

        process_image(album, image)

这是我希望解决的情况的一个简化示例。我有一个Album模型,它存储了需要处理的各种数量的Images。处理操作是在另一个函数中定义的,该函数用@taskdecorator包装,因此它可以并发运行(当工作进程数大于1时)

问题是如何以正确的方式在中实现album.should_pause()。当前的实现如下所示:

def should_pause(self):
    self.refresh_from_db()
    return self.processing_state != AlbumProcessingState.RUNNING

因此,在每次迭代中,都会查询数据库以更新模型,以确保state字段不会更改为AlbumProcessingState.RUNNING以外的内容,这将指示相册处理任务应该中断

虽然它可以工作,但感觉是错误的,因为我必须在每次迭代时从数据库更新模型,但是这些感觉可能是错误的。你觉得怎么样


Tags: 函数模型imageselfdbalbumreturndef

热门问题