1

キュー検証付きのアイテムの待合室を実装しようとしています。
一般的な考え方は、アイテムを待合室に置き、カウンター(これを確認するために必要な新しいアイテムの数を定義する値)を計算し、すべての新しいアイテムを追加した後にアイテムを減らし、最後にカウンターをゼロ未満に減らした後に確認することです。待合室にすでにアイテムがある場合は、計算されたカウンターが前のアイテムのカウンターによって増加するため、アイテムはキューに入れられます。
私の実装は非常に単純ですが、このソリューションは非常に高速であることがわかりました。しかし、前の項目を参照してもうまくいかず、理由がわかりません。待機中のオブジェクトから「ランダム」(または少なくとも最後の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()

編集:私は遅れています。

4

1 に答える 1

0

ほとんどいつものように-それは私のせいでした。私はこの問題への別のアプローチから重要な部分を実装しました、そしてこれはこの問題を引き起こしました。

とにかく私を助けようとしてくれてありがとう。

于 2012-12-29T15:14:01.143 に答える