我正在使用 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
处理操作定义在一个用@task
装饰器包装的不同函数中,因此它能够同时运行(当工人数量> 1时)。
问题是如何以album.should_pause()
正确的方式实施。当前的实现如下所示:
def should_pause(self):
self.refresh_from_db()
return self.processing_state != AlbumProcessingState.RUNNING
因此,在每次迭代中,都会查询数据库以更新模型,以确保该state
字段没有更改为 以外的其他AlbumProcessingState.RUNNING
值,这表明专辑处理任务应该中断。
虽然它有效,但感觉不对,因为我必须在每次迭代时从数据库中更新模型,但这些感觉可能是错误的。你怎么看?