Convert to be a PushProducer

This commit is contained in:
Erik Johnston 2018-08-23 11:01:36 +01:00
parent 931fd197cf
commit 1314baff14

View file

@ -150,9 +150,6 @@ class _S3DownloadThread(threading.Thread):
if not chunk: if not chunk:
return return
# We clear the wakeup_event flag just before we write the data
# to producer.
wakeup_event.clear()
reactor.callFromThread(producer._write, chunk) reactor.callFromThread(producer._write, chunk)
except Exception: except Exception:
@ -190,9 +187,10 @@ class _S3Responder(Responder):
"""See Responder.write_to_consumer """See Responder.write_to_consumer
""" """
self.consumer = consumer self.consumer = consumer
# We are a IPullProducer, so we expect consumer to call resumeProducing # We are a IPushProducer, so we start producing immediately until we
# each time they want a new chunk of data. # get a pauseProducing or stopProducing
consumer.registerProducer(self, False) consumer.registerProducer(self, True)
self.wakeup_event.set()
return self.deferred return self.deferred
def __exit__(self, exc_type, exc_val, exc_tb): def __exit__(self, exc_type, exc_val, exc_tb):
@ -200,13 +198,18 @@ class _S3Responder(Responder):
self.wakeup_event.set() self.wakeup_event.set()
def resumeProducing(self): def resumeProducing(self):
"""See IPullProducer.resumeProducing """See IPushProducer.resumeProducing
""" """
# The consumer is asking for more data, signal _S3DownloadThread # The consumer is asking for more data, signal _S3DownloadThread
self.wakeup_event.set() self.wakeup_event.set()
def pauseProducing(self):
"""See IPushProducer.stopProducing
"""
self.wakeup_event.clear()
def stopProducing(self): def stopProducing(self):
"""See IPullProducer.stopProducing """See IPushProducer.stopProducing
""" """
# The consumer wants no more data ever, signal _S3DownloadThread # The consumer wants no more data ever, signal _S3DownloadThread
self.stop_event.set() self.stop_event.set()