-1

EchoプロトコルのlineReceivedメソッドでは、子に書き込むたびに遅延オブジェクトを生成したいと思います。結果を待ち、子プロセスによるデータの処理が完了すると、結果を出力します。私はそれをする方法を見つける必要があります。現在、MyPPの関数outReceivedは、子プロセスから結果を取得します。

ありがとうございました

from sys import executable
from os import environ
import os
from twisted.internet import reactor, defer
from twisted.internet.protocol import Protocol
from twisted.internet.protocol import Factory
from twisted.internet import protocol
from twisted.protocols.basic import LineReceiver
import sys
import time
import math

implementation = """
from filter import censor
censor()
"""                         

class Echo(LineReceiver): 

    def lineReceived(self, data): 
        if self.factory.pp == None:
            pp = MyPP()
            self.factory.pp = reactor.spawnProcess(pp, executable, [executable, "-c", implementation], 
                                                                   env=environ, childFDs = {0:"w", 1:"r", 2:"r"})   
        self.factory.pp.writeToChild(0, data+'\r\n')




class EchoFactory(Factory): 

    protocol = Echo 
    pp = None


class MyPP(protocol.ProcessProtocol): 

    def connectionMade(self):  
        print "connectionMade!" 

    def outReceived(self, data): 
        pass




reactor.listenTCP(11111, EchoFactory()) 
print 'in parent', os.getpid() 
reactor.run()
4

1 に答える 1

1

childDataReceived(childFD, data)実装で実装する必要がありますProcessProtocol。これは、子プロセスからデータが到着したときにコールバックされます。API ドキュメントを参照してください。

于 2012-06-12T19:17:41.843 に答える