Tous les produits
Search
Centre de documentation

Platform For AI:Python SDK

Dernière mise à jour :Aug 09, 2026

Cette rubrique fournit une référence détaillée de l'API pour le SDK Python officiel et inclut des exemples de code complets pour les formats d'entrée et de sortie courants.

Remarque

Pour en savoir plus sur les cas d'utilisation et les principes de fonctionnement du SDK, consultez la rubrique SDK pour les appels de service.

Prérequis

pip install -U eas-prediction --user

Démarrage rapide

Choisissez une classe Request qui correspond au format des données d'entrée de votre modèle. Le code suivant présente un exemple minimal d'appel de service de bout en bout utilisant une requête sous forme de chaîne. Pour plus d'exemples, consultez la section Exemples.

#!/usr/bin/env python
from eas_prediction import PredictClient
from eas_prediction import StringRequest

if __name__ == '__main__':
    client = PredictClient('http://182848887922****.cn-shanghai.pai-eas.aliyuncs.com', 'my_service')
    client.set_token('YOUR_SERVICE_TOKEN')
    client.init()

    request = StringRequest('[{}]')
    resp = client.predict(request)
    print(resp)

Référence API

Le SDK Python met à disposition les classes suivantes, organisées par fonctionnalité :

Groupe

Description

Client principal

PredictClient : Configure les informations du service (endpoint, nom du service et token), envoie les requêtes et reçoit les réponses.

Entrées et sorties

  • StringRequest / StringResponse : Encapsulent les entrées et sorties pour les scénarios basés sur des chaînes de caractères, tels que les processeurs personnalisés ou les modèles PMML.

  • TFRequest / TFResponse : Encapsulent les requêtes et réponses pour les modèles TensorFlow.

  • TorchRequest / TorchResponse : Encapsulent les requêtes et réponses pour les modèles PyTorch.

  • BladeRequest / BladeResponse, etc. Pour obtenir la liste complète des types pris en charge, reportez-vous au SDK.

Service de file d'attente

  • QueueClient : Client de file d'attente asynchrone utilisé pour envoyer des données, s'abonner aux push de données et interroger l'état de la file d'attente.

  • Watcher : Abonné à la file d'attente créé par QueueClient.watch() pour recevoir les données transmises par push.

Paramètres communs

Endpoint : Adresse endpoint du serveur.

  • Pour un service standard, définissez ce paramètre sur l'endpoint de la passerelle par défaut. Exemple : 182848887922***.cn-shanghai.pai-eas.aliyuncs.com.

  • Pour une demande de connexion directe VPC, définissez ce paramètre sur l'endpoint de connexion directe VPC du service. Le format est <uid>.vpc.<region-id>.pai-eas.aliyuncs.com. Exemple : 182848887922****.vpc.cn-shanghai.pai-eas.aliyuncs.com.

Classe PredictClient

Méthode

Description

PredictClient(endpoint, service_name, custom_url)

  • Créez un objet PredictClient.

  • Paramètres :

    • Endpoint : Adresse endpoint du serveur. Voir Paramètres communs.

    • service_name : Nom du service.

    • custom_url : URL du service. Ce paramètre est facultatif. Utilisez-le uniquement pour les services dont le format d'endpoint n'est pas standard (c'est-à-dire ne respectant pas le format <uid>.<region>.pai-eas.aliyuncs.com), comme les services d'interface utilisateur web. Exemple : client = PredictClient(custom_url='<url>').

set_endpoint(endpoint)

  • Description : Définit l'adresse endpoint du serveur. Voir Paramètres communs.

  • Le paramètre endpoint spécifie l'endpoint côté serveur.

set_service_name(service_name)

  • Description : Définit le nom du service à appeler.

  • Paramètre : service_name. Nom du service demandé.

set_endpoint_type(endpoint_type)

  • Description : Définit le type de passerelle du serveur.

  • Paramètre : endpoint_type Type de passerelle à configurer. Les types de passerelle suivants sont pris en charge :

    • ENDPOINT_TYPE_GATEWAY : Passerelle par défaut.

    • ENDPOINT_TYPE_DIRECT : Indique une demande de connexion directe. Si vous ne définissez pas ce paramètre, le client accède au service via la passerelle par défaut.

set_token(token)

  • Description : Définit le token d'accès au service.

  • Le paramètre token spécifie le token d'accès au service.

set_retry_count(max_retry_count)

  • Description : Définit le nombre de tentatives après l'échec d'une requête.

  • Le paramètre max_retry_count spécifie le nombre de nouvelles tentatives en cas d'échec de la requête. La valeur par défaut est 5.

    Important

    Le client doit renvoyer les requêtes qui échouent en raison de problèmes intermittents, tels que des exceptions de processus côté serveur, des anomalies serveur ou la perte de la connexion persistante avec la passerelle. Par conséquent, ne définissez pas ce paramètre sur 0.

set_max_connection_count(max_connection_count)

  • Description : Définit le nombre maximal de connexions persistantes dans le pool de connexions du client. Pour des raisons de performances, le client établit des connexions persistantes avec le serveur et les place dans un pool de connexions. Pour chaque requête, le client récupère une connexion inactive du pool pour accéder au service.

  • Le paramètre max_connection_count spécifie le nombre maximal de connexions persistantes dans le pool de connexions. La valeur par défaut est 100.

set_timeout(timeout)

  • Description : Définit la durée d'expiration de la requête.

  • Paramètre : timeout spécifie le délai d'expiration d'une requête en millisecondes. La valeur par défaut est 5000.

init()

Initialisez l'objet PredictClient. Après avoir défini les paramètres, vous devez appeler la méthode init() pour que les paramètres prennent effet.

predict(request)

  • Description : Envoie une requête de prédiction à un service de prédiction en ligne.

  • Le paramètre request est une classe abstraite ; vous pouvez transmettre différents types de request, tels que StringRequest ou TFRequest.

  • Valeur de retour : L'objet Response correspondant à la requête.

Classe StringRequest

Méthode

Description

StringRequest(request_data)

  • Créez un objet StringRequest.

  • Paramètre : request_data spécifie la chaîne de requête à envoyer.

Classe StringResponse

Méthode

Description

to_string()

  • Description : Convertit un objet StringResponse en chaîne de caractères.

  • Valeur de retour : Corps de la réponse.

Classe TFRequest

Méthode

Description

TFRequest(signature_name)

  • Crée un objet TFRequest.

  • Paramètre : signature_name spécifie le nom de la signature dans le modèle à interroger.

add_feed(self, input_name, shape, data_type, content)

  • Description : Définit les données d'entrée requises pour un modèle TensorFlow.

  • Paramètres :

    • input_name : alias du tenseur d'entrée.

    • shape : forme du tenseur d'entrée.

    • data_type : type de données du tenseur d'entrée. Les types pris en charge sont les suivants :

      • TFRequest.DT_FLOAT

      • TFRequest.DT_DOUBLE

      • TFRequest.DT_INT8

      • TFRequest.DT_INT16

      • TFRequest.DT_INT32

      • TFRequest.DT_INT64

      • TFRequest.DT_STRING

      • TFRequest.TF_BOOL

    • content : contenu du tenseur d'entrée, représenté par un tableau unidimensionnel aplati.

add_fetch(self, output_name)

  • Description : Définit l'alias du tenseur à renvoyer en sortie lors d'une requête adressée à un modèle de service de prédiction en ligne TensorFlow.

  • Le paramètre output_name spécifie l'alias du tenseur de sortie.

    Ce paramètre est facultatif pour les modèles SavedModel. S'il n'est pas défini, toutes les sorties sont renvoyées.

    Ce paramètre est obligatoire pour les modèles figés (frozen models).

to_string()

  • Description : Sérialise l'objet ProtoBuf TFRequest en une chaîne de caractères.

  • Valeur de retour : chaîne sérialisée de l'objet TFRequest.

Classe TFResponse

Méthode

Description

get_tensor_shape(output_name)

  • Description : Récupère la forme du tenseur de sortie associé à l'alias spécifié.

  • Le paramètre output_name spécifie l'alias du tenseur dont vous souhaitez obtenir la forme.

  • Valeur de retour : forme du tenseur de sortie.

get_values(output_name)

  • Description : Récupère le vecteur de données du tenseur de sortie.

  • Le paramètre output_name correspond à l'alias du tenseur de sortie.

  • Valeur de retour : cette méthode renvoie la sortie sous forme de tableau unidimensionnel. Utilisez get_tensor_shape() pour récupérer la forme du tenseur et remodeler le tableau. La méthode renvoie des tableaux de résultats de types différents selon le type de la sortie.

Classe TorchRequest

Méthode

Description

TorchRequest()

Crée un objet TorchRequest.

add_feed(self, index, shape, data_type, content)

  • Description : Définit le tenseur d'entrée requis pour un modèle PyTorch.

  • Paramètres :

    • index : indice du tenseur d'entrée.

    • shape : forme du tenseur d'entrée.

    • data_type : type de données du tenseur d'entrée. Les types pris en charge sont les suivants :

      • TFRequest.DT_FLOAT

      • TFRequest.DT_DOUBLE

      • TFRequest.DT_INT8

      • TFRequest.DT_INT16

      • TFRequest.DT_INT32

      • TFRequest.DT_INT64

      • TFRequest.DT_STRING

      • TFRequest.TF_BOOL

    • content : contenu du tenseur d'entrée, représenté par un tableau unidimensionnel aplati.

add_fetch(self, output_index)

  • Description : Définit l'indice du tenseur à renvoyer en sortie lors d'une requête adressée à un modèle de service de prédiction en ligne PyTorch. Cette méthode est facultative. Si vous ne l'appelez pas pour définir l'indice du tenseur de sortie, toutes les sorties sont renvoyées.

  • Paramètre : output_index spécifie l'indice du tenseur de sortie.

to_string()

  • Description : Sérialise l'objet ProtoBuf TorchRequest en une chaîne de caractères.

  • Valeur de retour : chaîne sérialisée de l'objet TorchRequest.

Classe TorchResponse

Méthode

Description

get_tensor_shape(output_index)

  • Description : Récupère la forme du tenseur de sortie associé à l'indice spécifié.

  • Paramètres : output_index : indice du tenseur de sortie dont vous souhaitez récupérer la forme.

  • Valeur de retour : forme du tenseur de sortie correspondant à l'indice spécifié.

get_values(output_index)

  • Description : Récupère le vecteur de données d'un tenseur de sortie. Cette méthode renvoie la sortie sous forme de tableau unidimensionnel. Vous pouvez utiliser la méthode get_tensor_shape() pour obtenir la forme du tenseur correspondant et le remodeler en un tenseur multidimensionnel requis. La méthode renvoie des tableaux de résultats de types différents selon le type de la sortie.

  • Paramètre : output_index spécifie l'indice du tenseur de sortie à récupérer.

  • Valeur de retour : tableau de données du tenseur résultant.

Classe QueueClient

Méthode

Description

QueueClient(endpoint, queue_name)

  • Crée un objet QueueClient.

  • Paramètres :

    • Endpoint : adresse de l'endpoint du serveur.

    • queue_name : nom du service de file d'attente.

set_token(token)

  • Description : définit le jeton d'authentification pour le service de file d'attente.

  • Paramètre : token correspond au jeton du service de file d'attente.

init(uid=None,gid='eas')

  • Description : initialise un objet QueueClient.

  • Paramètres :

    • uid : identifiant utilisateur du client enregistré auprès du serveur. L'UID de chaque instance de client doit être unique. Un UID ne peut être enregistré qu'une seule fois. Le serveur répartit les données poussées de manière uniforme entre les différents UID.

    • Gid : identifiant de groupe du client enregistré auprès du serveur. Par défaut, tous les clients appartiennent au même groupe. Si plusieurs groupes existent, une copie des mêmes données est poussée vers tous les groupes.

set_logger(logger=None)

  • Description : configure un objet logger pour le QueueClient. Par défaut, les messages d'avertissement d'exécution sont affichés dans la sortie standard. Pour désactiver ces informations, définissez l'objet logger sur None.

  • Paramètre : logger. Spécifie l'objet de journalisation à configurer.

truncate(index)

  • Description : tronque les données de la file d'attente situées avant l'index spécifié.

  • Paramètre : index : spécifie l'index des données à partir duquel tronquer la file d'attente.

put(data,tags:dict={})

  • Description : écrit une donnée dans la file d'attente.

  • Paramètres :

    • data : contenu des données à écrire dans la file d'attente.

    • tags (facultatif) : tags associés aux données à écrire dans la file d'attente.

  • Valeur de retour :

    • index : valeur d'index des données actuellement écrites dans la file d'attente. Vous pouvez utiliser cette valeur pour interroger les données de la file d'attente.

    • requestId : identifiant de requête généré automatiquement pour les données actuellement écrites dans la file d'attente. L'identifiant de requête est un tag spécial qui peut également servir à interroger les données de la file d'attente.

get(request_id=None, index=0, length=1, timeout='5s', auto_delete=True, tags={})

  • Description : interroge les données de la file d'attente selon les conditions spécifiées.

  • Paramètres :

    • request_id : identifiant de requête des données à interroger. Si ce paramètre est spécifié, l'interrogation parcourt jusqu'à length enregistrements à partir de index. Si des données correspondant à l'identifiant de requête spécifié sont trouvées, elles sont renvoyées. Sinon, un résultat vide est retourné.

    • index : index de départ des données à interroger. La valeur par défaut est 0, ce qui signifie que l'interrogation commence à partir de la première donnée de la file d'attente.

    • length : nombre de données à interroger. Au maximum length éléments de données sont renvoyés, en commençant par l'index inclus.

    • timeout : délai d'attente de l'interrogation. Si le nombre de données dans la file d'attente atteint length pendant ce délai, les données sont renvoyées immédiatement. Sinon, l'interrogation s'arrête lorsque le timeout est atteint.

    • auto_delete : indique s'il faut supprimer automatiquement les données interrogées de la file d'attente. Si vous définissez ce paramètre sur False, vous pouvez interroger les données à plusieurs reprises. Appelez la méthode delete() pour supprimer manuellement les données.

    • tags : DICT de tags utilisé pour le filtrage. L'interrogation parcourt length éléments de données à partir de l'index spécifié et renvoie les données contenant les tags indiqués.

  • Valeur de retour : données interrogées depuis la file d'attente, sous forme de DataFrame.

attributes()

  • Description : récupère les attributs de la file d'attente, tels que la longueur totale de la file et la longueur actuelle des données.

  • Valeur de retour : attrs : attributs de la file d'attente. Le type de données est DICT.

delete(indexes)

  • Description : supprime les données associées à l'index spécifié de la file d'attente.

  • Paramètre : indexes : index ou liste d'index des données à supprimer de la file d'attente. Ce paramètre accepte un seul index de type String ou une liste d'index de type List.

search(index)

  • Description : interroge les informations de mise en file d'attente des données.

  • Paramètres : index : index des données à interroger.

  • Valeur de retour : informations de mise en file d'attente des données de type JSONObject, comprenant les champs suivants :

    • ConsumerId : identifiant de l'instance qui traite les données.

    • IsPending : indique si les données sont en cours de traitement.

      • True signifie que les données sont en cours de traitement.

      • False signifie que les données se trouvent dans la file d'attente.

    • WaitCount : nombre de données en attente dans la file avant les données actuelles. Ce champ n'est valide que lorsque IsPending est False. Si IsPending est True, la valeur est 0.

    Exemple de contenu renvoyé :

    • La réponse {'ConsumerId': 'eas.****', 'IsPending': False, 'WaitCount':2} indique que la requête est en file d'attente.

    • Le journal affiche search error:Code 404, Message: b'no data in stream' et renvoie {}. Cela signifie que les données n'ont pas été trouvées dans la file d'attente. Cette situation peut survenir parce que les données ont été traitées avec succès par le serveur et qu'un résultat a été renvoyé, ou parce que le paramètre d'index est configuré incorrectement. Veuillez vérifier et confirmer.

watch(index, window, index_only=False, auto_commit=False)

  • Description : s'abonne aux données de la file d'attente. Le service de file d'attente pousse les données vers le client selon les conditions spécifiées.

  • Paramètres :

    • index : index de départ pour l'abonnement aux données.

    • window : taille de la fenêtre d'abonnement. Il s'agit du volume maximal de données que le service de file d'attente peut pousser vers une seule instance de client à la fois.

      Remarque

      Si les données poussées ne sont pas validées, le serveur ne pousse pas de nouvelles données. Lorsque N éléments de données sont validés, la file d'attente de service pousse N nouveaux éléments de données vers le client. Cela garantit que le nombre d'éléments de données traités par le client à tout moment ne dépasse pas la taille de la fenêtre, ce qui limite la concurrence côté client.

    • index_only : indique s'il faut pousser uniquement la valeur d'index.

    • auto_commit : indique s'il faut valider automatiquement les données après leur envoi. Nous vous recommandons de définir cette option sur False. Validez manuellement les données après avoir reçu les données poussées et terminé le calcul. Si une instance échoue avant la fin du calcul, les données non validées sur cette instance sont distribuées par le service de file d'attente à d'autres instances pour traitement.

  • Valeur de retour : objet watcher permettant de lire les données poussées.

commit(index)

  • Description : valide les données associées à l'index spécifié.

    Remarque

    Une validation indique que les données poussées par la file d'attente de service ont été traitées. Les données peuvent alors être effacées de la file d'attente et n'ont plus besoin d'être poussées vers d'autres instances.

  • Paramètre : index : liste des valeurs d'index des données à valider dans la file d'attente. Ce paramètre accepte un seul index de type String ou une liste de plusieurs index.

Classe Watcher

Méthode

Description

run()

  • Description : exécutez un objet Watcher, établissez une connexion WebSocket avec le serveur pour recevoir les poussées de données et renvoyez les résultats à l'appelant en temps réel.

  • Valeur de retour : un objet DataFrame transmis en temps réel du service de file d'attente au client.

close()

Description : fermez un objet Watcher pour mettre fin à la connexion de données côté back-end.

Remarque

Un client ne peut avoir qu'un seul objet Watcher actif à la fois. Vous devez fermer l'objet Watcher actuel avant d'en démarrer un nouveau.

Exemples

Exemple d'inférence synchrone (par format d'entrée/sortie)

Sélectionnez l'exemple de code en fonction des types d'entrée et de sortie du service.

String

Les utilisateurs qui déploient des services avec un processeur personnalisé utilisent généralement des chaînes pour les appels de service, par exemple pour les services de modèles PMML. Le code suivant présente un exemple de programme.

#!/usr/bin/env python

from eas_prediction import PredictClient
from eas_prediction import StringRequest

if __name__ == '__main__':
    client = PredictClient('http://182848887922****.cn-shanghai.pai-eas.aliyuncs.com', 'scorecard_pmml_example')
    client.set_token('YWFlMDYyZDNmNTc3M2I3MzMwYmY0MmYwM2Y2MTYxMTY4NzBkNzdj****')
    client.init()

    request = StringRequest('[{"fea1": 1, "fea2": 2}]')
    for x in range(0, 1000000):
        resp = client.predict(request)
        print(resp)

TensorFlow

Si vous utilisez TensorFlow, servez-vous de TFRequest et TFResponse comme formats de données d'entrée et de sortie. Le code ci-dessous illustre un exemple.

#!/usr/bin/env python

from eas_prediction import PredictClient
from eas_prediction import StringRequest
from eas_prediction import TFRequest

if __name__ == '__main__':
    client = PredictClient('http://182848887922****.cn-shanghai.pai-eas.aliyuncs.com', 'mnist_saved_model_example')
    client.set_token('YTg2ZjE0ZjM4ZmE3OTc0NzYxZDMyNmYzMTJjZTQ1YmU0N2FjMTAy****')
    client.init()

    #request = StringRequest('[{}]')
    req = TFRequest('predict_images')
    req.add_feed('images', [1, 784], TFRequest.DT_FLOAT, [1] * 784)
    for x in range(0, 1000000):
        resp = client.predict(req)
        print(resp)

PyTorch

Pour PyTorch, employez TorchRequest et TorchResponse comme formats de données d'entrée et de sortie. Voici un exemple de code.

#!/usr/bin/env python

from eas_prediction import PredictClient
from eas_prediction import TorchRequest

if __name__ == '__main__':
    client = PredictClient('http://182848887922****.cn-shanghai.pai-eas.aliyuncs.com', 'pytorch_gpu_wl')
    client.init()

    req = TorchRequest()
    req.add_feed(0, [1, 3, 224, 224], TorchRequest.DT_FLOAT, [1] * 150528)
    # req.add_fetch(0)
    import time
    st = time.time()
    timer = 0
    for x in range(0, 10):
        resp = client.predict(req)
        timer += (time.time() - st)
        st = time.time()
        print(resp.get_tensor_shape(0))
        # print(resp)
    print("average response time: %s s" % (timer / 10) )

BladeProcessor

Avec BladeProcessor, optez pour BladeRequest et BladeResponse comme formats de données d'entrée et de sortie. L'extrait suivant montre un cas concret.

#!/usr/bin/env python

from eas_prediction import PredictClient
from eas_prediction import BladeRequest

if __name__ == '__main__':
    client = PredictClient('http://182848887922****.cn-shanghai.pai-eas.aliyuncs.com', 'nlp_model_example')
    client.init()

    req = BladeRequest()

    req.add_feed('input_data', 1, [1, 360, 128], BladeRequest.DT_FLOAT, [0.8] * 85680)
    req.add_feed('input_length', 1, [1], BladeRequest.DT_INT32, [187])
    req.add_feed('start_token', 1, [1], BladeRequest.DT_INT32, [104])
    req.add_fetch('output', BladeRequest.DT_FLOAT)
    import time
    st = time.time()
    timer = 0
    for x in range(0, 10):
        resp = client.predict(req)
        timer += (time.time() - st)
        st = time.time()
        # print(resp)
        # print(resp.get_values('output'))
        print(resp.get_tensor_shape('output'))
    print("average response time: %s s" % (timer / 10) )

BladeProcessor compatible with the default TensorFlow interface

Les utilisateurs de BladeProcessor peuvent recourir à TFRequest et TFResponse comme formats de données d'entrée et de sortie. Ces formats sont compatibles avec l'interface TensorFlow par défaut d'Elastic Algorithm Service (EAS). Le code ci-après fournit un exemple.

#!/usr/bin/env python

from eas_prediction import PredictClient
from eas_prediction.blade_tf_request import TFRequest # Need Importing blade TFRequest

if __name__ == '__main__':
    client = PredictClient('http://182848887922****.cn-shanghai.pai-eas.aliyuncs.com', 'nlp_model_example')
    client.init()

    req = TFRequest(signature_name='predict_words')

    req.add_feed('input_data', [1, 360, 128], TFRequest.DT_FLOAT, [0.8] * 85680)
    req.add_feed('input_length', [1], TFRequest.DT_INT32, [187])
    req.add_feed('start_token', [1], TFRequest.DT_INT32, [104])
    req.add_fetch('output')
    import time
    st = time.time()
    timer = 0
    for x in range(0, 10):
        resp = client.predict(req)
        timer += (time.time() - st)
        st = time.time()
        # print(resp)
        # print(resp.get_values('output'))
        print(resp.get_tensor_shape('output'))
    print("average response time: %s s" % (timer / 10) )

Exemple d'appel d'un service via une connexion directe VPC

Pour utiliser une connexion directe, configurez un Virtual Private Cloud (VPC) pour le service. Pour plus d'informations, consultez les rubriques Use Elastic Algorithm Service (EAS) resource groups et Access public or internal resources from EAS. Cette méthode d'appel nécessite seulement une ligne de code supplémentaire par rapport à la méthode normale : client.set_endpoint_type(ENDPOINT_TYPE_DIRECT). Elle convient parfaitement aux services générant un trafic élevé et une forte concurrence. Le code suivant en donne un exemple.

#!/usr/bin/env python

from eas_prediction import PredictClient
from eas_prediction import StringRequest
from eas_prediction import TFRequest
from eas_prediction import ENDPOINT_TYPE_DIRECT

if __name__ == '__main__':
    # The format of a VPC direct connection endpoint is <uid>.vpc.<region-id>.pai-eas.aliyuncs.com. You can find the endpoint on the Invocation Information tab of the service details page in the EAS console.
    client = PredictClient('http://182848887922****.vpc.cn-hangzhou.pai-eas.aliyuncs.com', 'mnist_saved_model_example')
    client.set_token('M2FhNjJlZDBmMzBmMzE4NjFiNzZhMmUxY2IxZjkyMDczNzAzYjFi****')
    client.set_endpoint_type(ENDPOINT_TYPE_DIRECT)
    client.init()

    request = TFRequest('predict_images')
    request.add_feed('images', [1, 784], TFRequest.DT_FLOAT, [1] * 784)
    for x in range(0, 1000000):
        resp = client.predict(request)
        print(resp)

Exemple : envoi et abonnement aux données dans un service de file d'attente

Vous pouvez utiliser QueueClient pour envoyer des données à un service de file d'attente, interroger les données, vérifier l'état du service et vous abonner aux poussées de données. La démonstration suivante présente un exemple avec deux threads. Un thread envoie des données au service de file d'attente. L'autre thread utilise un Watcher pour s'abonner aux données poussées.

#!/usr/bin/env python

from eas_prediction import QueueClient
import threading

if __name__ == '__main__':
    endpoint = '182848887922****.cn-shanghai.pai-eas.aliyuncs.com'
    queue_name = 'test_group.qservice/sink'
    token = 'YmE3NDkyMzdiMzNmMGM3ZmE4ZmNjZDk0M2NiMDA3OTZmNzc1MTUx****'

    queue = QueueClient(endpoint, queue_name)
    queue.set_token(token)
    queue.init()
    queue.set_timeout(30000)

    # truncate all messages in the queue
    attributes = queue.attributes()
    if 'stream.lastEntry' in attributes:
        queue.truncate(int(attributes['stream.lastEntry']) + 1)

    count = 100
    # create a thread to send messages to the queue
    def send_thread():
        for i in range(count):
            index, request_id = queue.put('[{}]')
            print('send: ', i, index, request_id)

    # create a thread to watch messages from the queue
    def watch_thread():
        watcher = queue.watch(0, 5, auto_commit=True)
        i = 0
        for x in watcher.run():
            print('recv: ', i, x.index, x.tags['requestId'])
            i += 1
            if i == count:
                break
        watcher.close()

    thread1 = threading.Thread(target=watch_thread)
    thread2 = threading.Thread(target=send_thread)

    thread1.start()
    thread2.start()

    thread1.join()
    thread2.join()

Dépannage

Pour obtenir des informations sur les symptômes, les causes et le dépannage des exceptions lors des appels du SDK Python, consultez la section « Troubleshooting call exceptions » de la rubrique Service Call SDK. Ces exceptions incluent les problèmes courants liés à l'authentification, au routage, à la connexion et au serveur.

Pour une liste complète des codes d'état du service, des descriptions des messages d'erreur et des solutions suggérées, consultez la rubrique Appendix: Service status codes and common errors.