2010-08-10 3 views
7

J'ai grandi à aimer erlang, et c'est un excellent ajustement (toux) architectural à mon problème. En attendant j'aime encore imaginer que je peux kludge erlang processus & message asynchrone passant en python (je suis actuellement en thérapie pour me débarrasser de cette obsession).0MQ avec des fils verts?

Au cours d'une récente frénésie je suis tombé sur 0MD & J'aime ses fonctions de messagerie. Ceux-ci peuvent être évidents pour un expert erlang/OTP, mais je ne suis qu'un humble programmeur python (mon psy va sans doute lire cet argument astucieux). Le 0MQ user-guide indique qu'il utilise des threads de système d'exploitation natifs et non des threads «verts» virtuels.

  1. Existe-t-il un moyen de faire fonctionner 0MQ avec say eventlet/gevent?

  2. Ou, devrais-je éviter le monstre aux yeux verts et le bâton à un seul fil d'application Python, avec des non-blocage d'E/S géré par le message de 0MQ faire la queue & son propre usage (qualifié) de threads natifs?

  3. Ou, vérifiez déshabillage & Retour à erlang?

Répondre

3

En réponse à un fil périmé parce que je suis un peu dans le même bateau. Je pensais partager mes pensées.

1: Tout semble avoir été fait: https://github.com/traviscline/gevent-zeromq a intégré la boucle gevent avec une socket zmq non bloquante et même des accélérations Cpython. Il semble également être (au moment de la rédaction de cet article) raisonnablement bien maintenu.

2: Cela dépend; Si vous écrivez quelque chose qui peut utiliser zmq sans une tonne de logique d'événement externe, alors vous devriez simplement utiliser zmq. Si vous avez besoin d'intégrer OTOH avec d'autres protocoles, vous pouvez utiliser gevent (ou tordu peut-être, bien qu'il n'ait pas de zmq utilisable du tout). Mes projets nécessitent généralement plusieurs protocoles (par exemple: gestionnaire de files d'attente privé, http public, public https, memcache privé, etc), donc j'étudie passer au gevent pour un délai d'exécution de projet plus rapide que mon préféré: tordu. 3: Vous pouvez ignorer entièrement zmq et l'intégrer à une solution existante basée sur erlang comme lapinMQ; les avantages de performance de zmq peuvent ne pas être aussi importants que vous le pensez, et vous avez alors une file d'attente de messages erlang qui s'intègre facilement avec python avec les bibliothèques existantes.

Voir aussi: Messsage Queue comparison at second life wiki