Forum Programmation.python Python: Optimisation de la fontion

Posté par . Licence CC By‐SA.
Étiquettes : aucune
-1
25
mar.
2021

Bonjour :) ,

Je voudrais optimiser ma fonction car elle tourne en boucle plusieurs fois et prend plusieurs minutes à se connecter.

def gmail_request(shop,req_type,ressource,endpoints="",post_data={}):
 global user_id,api_key,client_id,client_secret,refresh_token,access_tokens
 tries = 0
 #print(shop)
 while tries < 20:
 try:
 cont = "https://www.googleapis.com/gmail/v1/users/{}/{}?{}key={}".format(user_id[shop],ressource,endpoints,api_key[shop])
 if req_type == "get":
 r = requests.get(cont,headers={"Authorization":"OAuth {}".format(access_tokens[shop])}, timeout=15)
 print(r.json())
 elif req_type == "post":
 r = requests.post(cont,headers={"Authorization":"OAuth {}".format(access_tokens[shop])},json=post_data, timeout=15)
 if r.status_code > 300:
 data = {"client_id":client_id[shop],"client_secret":client_secret[shop],"refresh_token":refresh_token[shop],"grant_type":"refresh_token"}
 r2 = requests.post("https://www.googleapis.com/oauth2/v4/token",data=data, timeout=15)
 print(r2.json())
 access_tokens[shop] = r2.json()["access_token"]
 continue #retry a request with a new access_token
 break
 except:
 #print("connexion error on gmail, retrying...")
 time.sleep(10)
 tries += 1
 return r
  • # un probleme d'algorithmiques

    Posté par . Évalué à 3.

    ton code cherche a executer une operation, attendre 15 secondes
    si le retour est >300, tenter d'avoir un nouveau jeton
    si le timeout est atteint, attendre 10secondes et recommencer,

    un algo plus optimisé pourrait etre :
    1°) verifier la validité du jeton, ca doit etre quasi instantané et le renouveler si besoin
    2°) tenter ta requête post/get avec un timeout plus élevé que les 15sec, et faire moins de retry

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.