15.12.2022 Views

Python Eficaz

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

print('Had 3 quota')

else:

print('Not enough for 3 quota')

print(bucket)

>>>

Not enough for 3 quota

Bucket(quota=1)

O problema com essa implementação é que eu nunca sei qual o nível de quota

inicial do balde. A quota é debitada no decorrer do período até que atinja o valor

zero. Nesse ponto, deduct sempre retornará False. Quando isso acontece, seria

útil saber se os chamadores de deduct estão sendo bloqueados porque o Bucket

esgotou sua quota ou se o Bucket nunca teve quota desde o início.

Para aprimorar a funcionalidade, podemos modificar a classe para que registre a

quota máxima atribuída no período (max_quota) e também a quota consumida

(quota_consumed) no mesmo período.

class Bucket(object):

def __init__(self, period):

self.period_delta = timedelta(seconds=period)

self.reset_time = datetime.now()

self.max_quota = 0

self.quota_consumed = 0

def __repr__(self):

return ('Bucket(max_quota=%d, quota_consumed=%d)' %

(self.max_quota, self.quota_consumed))

Usamos um método de @property para computar o nível de quota atual em

tempo real usando esses novos atributos.

@property

def quota(self):

return self.max_quota - self.quota_consumed

Quando é atribuído um valor à propriedade quota, é preciso uma ação especial

para a interface atual seja a mesma usada por fill e deduct.

www.full-ebook.com

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!