キュー検証付きのアイテムの待合室を実装しようとしています。
一般的な考え方は、アイテムを待合室に置き、カウンター(これを確認するために必要な新しいアイテムの数を定義する値)を計算し、すべての新しいアイテムを追加した後にアイテムを減らし、最後にカウンターをゼロ未満に減らした後に確認することです。待合室にすでにアイテムがある場合は、計算されたカウンターが前のアイテムのカウンターによって増加するため、アイテムはキューに入れられます。
私の実装は非常に単純ですが、このソリューションは非常に高速であることがわかりました。しかし、前の項目を参照してもうまくいかず、理由がわかりません。待機中のオブジェクトから「ランダム」(または少なくとも最後の1つではない)値が返されることがよくあります。
重要なコードスニペットは次のとおりです。
class Waiting(models.Model):
item = models.ForeignKey(Item)
counter = models.FloatField(default=0)
(...)
def clearup(self):
(...) #here is decrementing and confirming part - it's working fine
def save(self, update=False):
if update:
return super(Waiting, self).save()
item = self.item
self.clearup()
(...) #nothing important
self.counter = item.quantity * items_list[item.name][1]
last = Waiting.objects.exclude(
item__name="Something I don't want here").order_by('-pk')
if last:
last = last[0]
weight = items_list[last.item.name][1]
self.counter += (last.item.quantity * weight)
super(Waiting, self).save()
編集:私は遅れています。