2011-02-27 4 views
3

J'utilise facebook python Graph API. Lorsque j'appelle put_object pour écrire dans le fil de nouvelles, il faut environ 12-14 secondes pour terminer l'appel. Lorsque je cours à partir de la ligne de commande en utilisant curl avec les mêmes paramètres, je reçois la réponse en 1,2 secondes.python facebook sdk appel à facebook est lent par rapport à la ligne de commande curl

J'ai exécuté le profileur sur le code python et de je vois qu'il passe 99,5% de temps dans le socket.recv. Je ne suis pas sûr si c'est le problème avec Facebook python sdk ou autre chose.

Je suis sur python 2.6. Je vois sur facebook.py qu'il utilise urllib.

file = urllib.urlopen("https://graph.facebook.com/" + path + "?" + 
          urllib.urlencode(args), post_data) 

Quelqu'un at-il connu un ralentissement similaire? Toute suggestion serait très appréciée.

+0

Partager le profil .. –

+0

pynator, je n'ai pas compris ce que vous vouliez dire. –

+0

On dirait que j'ai le même problème ... avez-vous trouvé une solution? – Anke

Répondre

0

La ligne de commande directe CURL doit être plus rapide que urllib ou urllib2. Si vous voulez de la vitesse, vous pouvez remplacer l'appel en utilisant pycurl (qui est aussi une extension C) alors que urllib est un module python écrit au-dessus de httplib. Ce que vous pouvez faire de plus, si vous êtes assez flexible pour utiliser un serveur Tornado, utilisez l'appelant asynchrone de Tornado qui parle directement aux sockets et est également asynchrone.

De même, si rien de cela ne peut être fait, essayez de remplacer urllib par urllib2 et créez un appelant non bloquant avec des retours de rappel. C'est tout ce que j'ai fait pour améliorer les wrappers natifs de facebook/twitter/amazon etc.

+0

note que CURL est un outil en ligne de commande qui est écrit en C, extensions C (code compilé) et les outils que j'ai utilisés ou créés à partir de maintenant ont montré au moins 3 fois plus de vitesse que mon python modules. –

0

Êtes-vous derrière un serveur proxy http? Curl honore les variables d'environnement du serveur proxy, alors que urllib ne le fait pas par défaut, et ne supporte pas l'appel d'une URL https (telle que https://graph.facebook.com) sur un serveur proxy.

Dans tous les cas, je pense que c'est plus un problème de réseau qu'un problème Python vs C. Oui C est plus rapide, mais ce n'est pas une tâche liée au processeur, et il n'y a aucun moyen que vous brûliez 12-14 secondes dans l'interpréteur Python pour faire cet appel.

Si curl est content mais que urllib ne l'est pas, essayer pycurl résoudra peut-être votre problème. http://pycurl.sourceforge.net/

Questions connexes