summaryrefslogtreecommitdiff
path: root/pypers/twisted/downloader3.py
diff options
context:
space:
mode:
Diffstat (limited to 'pypers/twisted/downloader3.py')
-rw-r--r--pypers/twisted/downloader3.py37
1 files changed, 37 insertions, 0 deletions
diff --git a/pypers/twisted/downloader3.py b/pypers/twisted/downloader3.py
new file mode 100644
index 0000000..b5c0d38
--- /dev/null
+++ b/pypers/twisted/downloader3.py
@@ -0,0 +1,37 @@
+"""
+A model for a file downloader: Synchronous, Threaded and Asynchronous.
+"""
+
+import os, sys, cmd, time, threading
+from ms.debug_utils import TkWindow
+from ms.async_utils import MultiIter, run_iter
+
+from twisted.internet import reactor
+from downloader1 import Downloader
+
+class AsynchronousDownloader(Downloader):
+ "Twisted based."
+ mi = MultiIter()
+ def postloop(self):
+ reactor.stop()
+ while reactor.running: pass # until the stop message is received
+ Downloader.postloop(self)
+ def do_download(self, arg):
+ self.mi.append(self.download(arg))
+ def download(self, fname):
+ self.out.write("BEGIN %s" % fname)
+ for line in file(fname):
+ time.sleep(.1)
+ self.out.write(".")
+ yield None
+ self.out.write(" END %s\n" % fname)
+
+def ended(_):
+ print _, "ended"
+ #d.out.close()
+
+if __name__ == "__main__":
+ d = AsynchronousDownloader()
+ threading.Thread(None, d.cmdloop).start()
+ run_iter(d.mi, reactor.callLater, 0)
+ reactor.run()