Módulo google.appengine.ext.remote_api.throttle

Resumo

Limitação de transferência no lado do cliente a ser usada com remote_api_stub.

Este módulo é usado para configurar a limitação de taxa para programas que acessam serviços do AppEngine por meio de remote_api.

Consulte a classe Throttle para mais informações.

Um exemplo com limitação: — de google.appengine.ext import db de google.appengine.ext.remote_api import remote_api_stub de google.appengine.ext.remote_api import throttle de myapp import models import getpass import threading

def auth_func():

return (raw_input(‘Username:’), getpass.getpass(‘Password:’))

remote_api_stub.ConfigureRemoteDatastore(‘my-app’, ‘/remote_api’, auth_func) full_throttle = throttle.DefaultThrottle(multiplier=1.0) throttle.ThrottleRemoteDatastore(full_throttle)

# Registre todas as linhas de execução que usarão o repositório de dados com o limitador full_throttle.Register(threading.currentThread())

# Você já pode acessar o armazenamento de dados remoto como se o código estivesse em execução no App Engine e não precisa se preocupar em exceder os limites de cota.

houses = model.House.all().fetch(100) para a_house em houses:

a_house.doors += 1

db.put(houses) —

Este exemplo limita o uso aos níveis de cota livre padrão. O multiplicador kwarg para throttle.DefaultThrottle pode ser usado para escalonar os níveis de limitação para mais alto ou mais baixo.

As limitações também podem ser criados diretamente para maior controle sobre os limites para operações diferentes. Consulte a classe Throttle e as constantes seguidas para detalhes.

Índice

class google.appengine.ext.remote_api.throttle.DatastoreThrottler(throttle)source

Bases: google.appengine.ext.remote_api.throttle.Throttler

AddCost(cost_proto)source

Adicione custos do protobuf Cost.

google.appengine.ext.remote_api.throttle.DefaultThrottle(multiplier=1.0)source

Retorne uma instância Throttle com multiplicador * dos limites de cota.

exception google.appengine.ext.remote_api.throttle.Errorsource

Bases: exceptions.Exception

Classe base para erros neste módulo.

google.appengine.ext.remote_api.throttle.InterruptibleSleep(sleep_time)source

Suspende o thread, verificando esses threads exit_flag quatro vezes por segundo.

Parâmetros

sleep_time: tempo de suspensão.

google.appengine.ext.remote_api.throttle.SleepHandler(*throttle_names)source
exception google.appengine.ext.remote_api.throttle.ThreadNotRegisteredErrorsource

Bases: google.appengine.ext.remote_api.throttle.Error

Um thread não registrado acessou o stub do armazenamento de dados limitado.

class google.appengine.ext.remote_api.throttle.Throttle(get_time=function, thread_sleep=InterruptibleSleep, layout=None)source

Bases: object

Uma classe base para limitação da taxa de upload.

Transferir um grande número de entidades muito rapidamente pode acionar limites de cotas e paralisar o processo de transferência. Para permanecer dentro da cota do aplicativo, limitamos a transferência de dados para um limite especificado (em todos os threads de transferência).

Essa classe rastreia uma média móvel de algum aspecto da taxa de transferência (largura de banda, registros por segundo, conexões http por segundo). Ela mantém duas janelas de contagens de bytes transferidos, por thread. Um bloco é o bloco "atual", e o outro é o bloco "anterior". Ela alternará as contagens de atual para anterior quando ROTATE_PERIOD tiver passado. Por isso, o bloco atual representará de zero segundo a ROTATE_PERIOD segundos de atividade (determinado por: time.time() - self.last_rotate). O bloco anterior sempre representará um ROTATE_PERIOD completo.

A suspensão é realizada pouco antes de uma transferência de outro bloco e se baseia nas contagens transferidas antes da próxima transferência. Não importa quanto será transferido, mas apenas que, para todos os dados transferidos ATÉ O MOMENTO, tenhamos intercalado pausas suficientes para garantir que a taxa de transferência agregada esteja dentro do limite especificado.

Essas contagens são mantidas por thread. Dessa forma, não precisamos de intertravamentos para incrementar as contagens. Existe um intertravamento na rotação das contagens porque não queremos que vários threads multipliquem as contagens.

Existem várias condições de corrida na computação e na coleção dessas contagens. Não exigimos valores precisos, mas simplesmente mantemos a transferência geral dentro dos limites da largura de banda. Se uma determinada pausa for um pouco curta ou um pouco longa, os atrasos agregados estarão corretos.

AddThrottle(name, limit)source
AddThrottles(layout)source
AddTransfer(throttle_name, token_count)source

Adicione uma contagem ao valor transferido por esse thread.

Sempre que transfere alguns dados, um thread precisa chamar esse método para anotar o valor enviado. As contagens poderão ser alternadas se o tempo suficiente tiver passado desde a última rotação.

Parâmetros
  • throttle_name: o nome da limitação a ser adicionada

  • token_count: o número a ser adicionado ao contador de limitações

ROTATE_PERIOD = 600
Register(thread)source

Registre esse thread com o limitador.

Sleep(throttle_name=None)source

Possivelmente suspenso para limitar a taxa de transferência.

Suspendemos com base em transferências anteriores, e não naquilo que podemos estar prestes a transferir. A próxima transferência poderá nos colocar abaixo/acima, e isso será corrigido depois dessa transferência. O resultado prático é que a taxa de transferência média permanecerá dentro dos limites. Um comportamento de pico ou taxas desiguais entre os threads podem deixar a taxa de transferência acima do limite solicitado por durações curtas.

Parâmetros

throttle_name: o nome da limitação para suspensão. Se None ou omitido, suspenda todas as limitações.

TotalTransferred(throttle_name)source

Retorne o total transferido e em qual período.

Parâmetros

throttle_name: o nome da limitação para total.

Retorna

Uma tupla da contagem total e do tempo de execução para o nome da limitação especificado.

VerifyThrottleName(throttle_name)source
class google.appengine.ext.remote_api.throttle.ThrottleHandler(throttle)source

Bases: urllib2.BaseHandler

Um administrador urllib2 para solicitações http e https adicionadas a uma limitação.

AddRequest(throttle_name, req)source

Adicione à limitação da largura de banda para uma determinada solicitação.

Parâmetros
  • throttle_name: o nome da limitação da largura de banda a ser adicionada

  • req: a solicitação com o tamanho que será adicionado à limitação

AddResponse(throttle_name, res)source

Adicione à limitação da largura de banda para uma determinada resposta.

Parâmetros
  • throttle_name: o nome da limitação da largura de banda a ser adicionada

  • res: a resposta com o tamanho que será adicionado à limitação

http_request(req)source

Processe uma solicitação HTTP.

Se a limitação estiver acima da cota, suspenda primeiro. Em seguida, adicione o tamanho da solicitação à limitação antes de devolvê-lo para ser enviado.

Parâmetros

req: um objeto urllib2.Request.

Retorna

A solicitação passada.

http_response(unused_req, res)source

Processe uma resposta HTTP.

O tamanho da resposta é adicionado à limitação da largura de banda, e a limitação da solicitação é incrementada em um.

Parâmetros
  • unused_req: a solicitação urllib2 dessa resposta

  • res: um objeto de resposta urllib2

Retorna

A resposta passada.

https_request(req)source

Processe uma solicitação HTTPS.

Se a limitação estiver acima da cota, suspenda primeiro. Em seguida, adicione o tamanho da solicitação à limitação antes de devolvê-lo para ser enviado.

Parâmetros

req: um objeto urllib2.Request.

Retorna

A solicitação passada.

https_response(unused_req, res)source

Processe uma resposta HTTPS.

O tamanho da resposta é adicionado à limitação da largura de banda, e a limitação da solicitação é incrementada em um.

Parâmetros
  • unused_req: a solicitação urllib2 dessa resposta

  • res: um objeto de resposta urllib2

Retorna

A resposta passada.

google.appengine.ext.remote_api.throttle.ThrottleRemoteDatastore(throttle, remote_datastore_stub=None)source

Instale a limitação especificada para o stub do armazenamento de dados remoto.

Parâmetros
  • throttle: uma instância Throttle para limitar taxas de acesso ao armazenamento de dados

  • remote_datastore_stub: a instância do stub do armazenamento de dados a ser limitada para fins de teste

class google.appengine.ext.remote_api.throttle.ThrottledHttpRpcServer(throttle, *args, **kwargs)source

Bases: google.appengine.tools.appengine_rpc.HttpRpcServer

Fornece uma interface simplificada em estilo RPC para solicitações HTTP.

Esse servidor RPC usa um Throttle para evitar exceder cotas.

class google.appengine.ext.remote_api.throttle.ThrottledHttpRpcServerFactory(throttle, throttle_class=None)source

Bases: object

Uma fábrica a fim de produzir ThrottledHttpRpcServer para uma determinada limitação.

class google.appengine.ext.remote_api.throttle.ThrottledHttpRpcServerOAuth2(throttle, *args, **kwargs)source

Bases: google.appengine.tools.appengine_rpc_httplib2.HttpRpcServerOAuth2

class google.appengine.ext.remote_api.throttle.Throttlersource

Bases: object

PosthookHandler(service, call, request, response)source
PrehookHandler(service, call, request, response)source
exception google.appengine.ext.remote_api.throttle.UnknownThrottleNameErrorsource

Bases: google.appengine.ext.remote_api.throttle.Error

Uma transferência foi adicionada para um nome de limitação desconhecido.