Django-RQ (v2.3.0)
データベースのクエリを使用すると、 (PostgreSQL)
2 回実行した場合にのみ機能します。これはセットアップです:
models.py
:
class AnalysisResult(models.Model):
user = models.ForeignKey(get_user_model(), on_delete=models.CASCADE)
public_id = models.UUIDField(unique=True, default=uuid.uuid4, editable=False)
tasks.py
:
@job(os.getenv("REDIS_QUEUE_NAME", "default"))
def update_progress_in_db(result_id: UUID):
# FIXME This query only works on the second try when we run this here inside the rqworker?!
try:
tmp_record = AnalysisResult.objects.get(public_id=result_id)
except (AnalysisResult.DoesNotExist, AnalysisResult.MultipleObjectsReturned) as e:
# Always getting the exception here!
logger.error("Error retrieving tmp_record with id={}: {}.".format(result_id, e))
except Exception as ex:
logger.error("General error while retrieving tmp_record: {}".format(ex))
try:
record = AnalysisResult.objects.get(public_id=result_id)
logger.debug("result record: {}".format(record)) # Working fine.
except (AnalysisResult.DoesNotExist, AnalysisResult.MultipleObjectsReturned) as e:
# Never getting this exception.
logger.error("Error updating progress status with id={}: {}.".format(result_id, e))
except Exception as ex:
logger.error("General error while updating progress status: {}".format(ex))
で実行AnalysisResult.objects.get(public_id=result_id)
するとdjango-admin shell
、最初の試行で常に正常に動作します。そして、レコードを 2 回クエリしようとする上記の回避策を使用したくありません。ただ汚すぎる感じです。
ここに欠けている可能性があるものについてのポインタをいただければ幸いです。