これは、「Twisted Network Programming Essential」の例です。
from twisted.internet import reactor
from twisted.internet.defer import Deferred
from twisted.internet.protocol import Protocol
from twisted.web.client import Agent
import sys
from random import random
class ResourcePrinter(Protocol):
def __init__(self, finished):
self.finished = finished
def dataReceived(self, data):
print data
def connectionLost(self, reason):
self.finished.callback(None)
def printResource(response):
# Nothing added to this 'finished'
finished = Deferred()
response.deliverBody(ResourcePrinter(finished))
return finished
def printError(failure):
print >>sys.stderr, failure
def stop(result):
reactor.stop()
if len(sys.argv) != 2:
print >>sys.stderr, 'Usage'
exit(1)
agent = Agent(reactor)
d = agent.request('GET', sys.argv[1])
d.addCallbacks(printResource, printError)
d.addBoth(stop)
reactor.run()
しかし、 in で呼び出されることはないのに、最終的に in で呼び出されるaddCallback()
のfinished
はprintResource()
なぜでしょうか?stop()
connectionLost()