2011-05-15 3 views
7

J'essaie de porter une quantité significative de code écrit en python avec twisted to scala, et je cherche des opinions sur la combinaison de framework à choisir. Il s'agit essentiellement d'un serveur et d'un client RPC (custom protobuf-based + xmlrpc)/HTTP, qui effectue un certain nombre de bases de données et de transformations, mais qui envoie ensuite des rpcs aux travailleurs hors de portée de cette réécriture.Portage de code basé sur python-twisted à scala: conseil de base nécessaire

En tant qu'OE/base de réseau pour la mise en œuvre de la pile RPC, j'utilise netty. Tous les workflows de l'ancienne version étaient basés sur le mode différé de Twisted, et pour le remplacer, je considère actuellement soit ChannelFuture directement, soit l'intégrant dans scalaz.Promise ou akka.Future. Je suppose, une partie de la question est - peut-il être fait plus simple que de travailler manuellement avec des rappels? Je suppose, si je choisis cette route, je peux la simplifier plus tard en ajoutant des wrappers et en utilisant des continuations, mais peut-être que je dois utiliser quelque chose de différent depuis le début?

J'ai essayé d'adapter le flux de travail à l'intérieur du modèle d'acteur, mais cela ne semble pas fonctionner avec les acteurs de stdlib.

Merci.

Mise à jour: Finagle semble être modélisé de près, ou au moins accidentellement similaire, à tordu. twitter.util.Future ressemble beaucoup à Deferred. Donc je l'utilise pour le moment.

Mise à jour 2: Les raisons pour lesquelles je l'ai porté en premier lieu sont le typage statique et les performances.

+0

Avez-vous essayé Twisted sur PyPy? –

+0

Quels avantages espérez-vous tirer du fait que Finagle et Twisted traitent les E/S asynchrones de la même façon? C'est le style ou la performance, si c'est le style, vous pouvez regarder gevent qui utilise coroutines et greenlets, mais encore une fois tordu et tornado ont inlineCallbacks et tornado.gen qui facilite les rappels. – RubyGladiator

Répondre

2

Finagle semble être modélisé de près, ou au moins accidentellement similaire, à tordu. twitter.util.Future ressemble beaucoup à Deferred. Donc je l'utilise pour le moment.

1

Jetez un oeil à ce link.

Il s'agit d'un blog sur la comparaison des performances entre Scala et Python + Twisted. Son code (ou son conseil) pourrait vous être utile.

+1

cet article de blog semble terriblement démodé cependant. –

+0

@ErikAllik Je comprends votre point de vue. Mais ce que je pensais être pertinent dans le blog était le code. En l'utilisant, il pourrait facilement faire un benchmark rapide avec de nouvelles versions de python et scala. –

Questions connexes