2010-01-15 13 views
3

Je cherche à utiliser torsadée pour contrôler la communication entre les conduites Linux (os.pipe()) et FIFOs (os.mkfifo()) entre un processus maître et un ensemble de processus esclaves . Bien que je sois positif, il est possible d'utiliser tordu pour ces types de descripteurs de fichiers (après tout, tordu est idéal pour les sockets tcp dont * nix abstrait comme descripteur de fichier), je ne trouve aucun exemple de ce type d'utilisation. Quelqu'un at-il des liens, un exemple de code ou un conseil?Exemple d'utilisation de Twisted Python avec descripteurs de fichiers

Répondre

-3

Il n'a rien intégré pour les E/S asynchrones. Quelqu'un a écrit un libaio wrapper pour cela, mais il n'a pas été touché depuis longtemps, et je n'ai aucune idée si cela fonctionne encore.

Dans le pire des cas, vous pouvez utiliser select pour voir s'il y a quelque chose à lire, mais cela ne vous aidera pas à écrire.

12

Vous pouvez utiliser reactor.spawnProcess pour définir des mappages de descripteurs de fichiers arbitraires entre un processus parent et un processus enfant généré. Par exemple, pour exécuter un programme et lui donner deux descripteurs de sortie supplémentaires (en plus de stdin, stdout et stderr) avec laquelle il peut envoyer des octets revenir au processus parent, vous feriez quelque chose comme ceci:

reactor.spawnProcess(protocol, executable, args, 
        childFDs={0: 'w', 1: 'r', 2: 'r', 3: 'r', 4: 'r'}) 

Le réacteur prendra soin de créer les tuyaux pour vous, et appellera childDataReceived sur le ProcessProtocol que vous passez quand les données sont lues à partir d'eux. Voir le spawnProcess API docs pour plus de détails.

Si vous utilisez également Twisted sur le côté enfant, alors vous voulez surtout regarder twisted.internet.stdio. stdiodemo.py et stdin.py dans le core examples vous montrera comment utiliser ce module.

+0

Cette dernière phrase mentionnant 'twisted.internet.stdio' était exactement ce que je cherchais. J'ai eu du mal à le trouver, puisque http://twistedmatrix.com/documents/13.0.0/core/howto/process.html ne le mentionne pas du tout (comment faire un enfant ..). Merci beaucoup! – oberstet