2012-02-28 3 views
1

Je veux envoyer beaucoup de nombres via zeromq mais les convertir en str est inefficace. Quel est le meilleur moyen d'envoyer des numéros via zmq?envoyer un numéro par zeromq pyzmq

+0

Si vous traitez tellement de messages qu'il est lent pour Python de convertir la chaîne <--> int, vous devrez peut-être repenser votre choix exact d'architecture/langue. – lunixbochs

+0

Quel genre de nombres (int/float, quelle taille) envoyez-vous, combien dans un message, etc.? – minrk

Répondre

2

Vous dites que la conversion des numéros à str est inefficace. Et pourtant, à moins d'avoir un réseau vraiment exotique, c'est exactement ce qui doit se produire quelle que soit la solution choisie, car tous les réseaux largement utilisés aujourd'hui sont basés sur des octets.

Bien sûr, certaines méthodes de conversion de nombres en chaînes d'octets sont plus rapides que d'autres. L'exécution de la conversion en code C sera probablement plus rapide qu'en code Python, mais considérez aussi s'il est acceptable d'exclure les entiers "longs" (bignum). Si les exclure n'est pas acceptable, la fonction str peut être aussi bonne que possible.

Les modules struct et cpickle peuvent fonctionner mieux que str si l'exclusion de nombres entiers longs est acceptable.

4

Quelques possibilités:

  • utilisation des méthodes struct.pack/python de struct.unpack par exemple struct.pack ("! L", 1234567)

  • utiliser une autre sérialiseur comme msgpack

+0

+1 pour msgpack. C'est un ajustement idéal pour Python parce que vous pouvez transformer un dict en un message msgpaxk aussi facilement qu'un objet JSON. Et il gère les entiers et les flotteurs de manière très efficace. –