Browse Source

Example using coop/coiterate.

Steve Thielemann 5 years ago
parent
commit
908699dc82
1 changed files with 50 additions and 0 deletions
  1. 50 0
      examples/coop.py

+ 50 - 0
examples/coop.py

@@ -0,0 +1,50 @@
+#!/usr/bin/env python
+
+
+# https://twistedmatrix.com/documents/16.2.0/core/howto/defer.html
+
+from twisted.internet import reactor, defer
+from twisted.internet.task import cooperate, coiterate
+from twisted.internet.defer import gatherResults
+from os.path import basename
+
+from pprint import pprint
+LONG = 15
+
+def work_some(filename):
+    base = basename(filename)
+    with open(filename) as fp:
+        for line in fp:
+            if 'Sector' in line:
+                print("{0:15} : {1}".format(base, line.strip()))
+            yield
+
+def work_done(value):
+    print("Job done:", value)
+
+# cooperate(work_some("../logs/proxy.log"))
+# cooperate(work_some("../logs/proxy.log.2019_11_30"))
+
+d1 = coiterate(work_some("../logs/proxy.log"))
+# There's no way this way to tell work_done what file is done.
+# d.addCallback(work_done)
+d1.addCallback(lambda ignore: work_done('proxy.log'))
+
+d2 = coiterate(work_some("../logs/proxy.log.2019_11_30"))
+# d.addCallback(work_done)
+d2.addCallback(lambda ignore: work_done('proxy.log.2019_11_30'))
+
+# Gather the results, stop the reactor when they are all done.
+
+gr = gatherResults([d1, d2])
+gr.addCallback(lambda ignore: reactor.stop())
+
+# Not needed, we stop when we need to.  ;)
+# print("Stop the reactor in", LONG, "seconds...")
+# reactor.callLater(LONG, reactor.stop)
+
+print("starting the reactor")
+reactor.run()
+
+
+print("Reactor has been safely shutdown.  :P")