-1
在Echo協議的lineReceived方法中,我希望每次寫入child時都會生成一個延遲對象。它會等待結果,然後在子進程完成數據處理後打印結果。我需要找到一種方法來做到這一點。現在,MyPP的函數outReceived從子進程獲取結果。扭曲的Python:如何使一個等待來自子進程的數據的延遲對象?
謝謝
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()
是的,但是你的問題是什麼?這目前看起來像「請爲我實現X」。你嘗試了什麼,它是如何失敗的,你卡在哪裏? –
我的嘗試是在writeToChild行之後的Echo協議中的lineReceived中生成一個延遲對象。然後,我做了,addCallback(printData)。 printData是一個將數據廣播到Echo的所有實例的函數。 問題是回調(結果),我無法從MyPP的outReceived得到結果。當outReceived返回結果時,延遲對象如何知道? 我想知道我是否在正確的軌道上。我正在處理的新方法是使用將返回的延遲對象來包裝writeToChild調用。然後我會在outReceived中發起回調。 –