diff threaDemo.py @ 2:e07789816ca5

adding more python files from lib/python on origen
author Henry Thompson <ht@markup.co.uk>
date Mon, 09 Mar 2020 16:48:09 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/threaDemo.py	Mon Mar 09 16:48:09 2020 +0000
@@ -0,0 +1,39 @@
+#!/usr/bin/python3
+import threading
+from queue import Queue
+import time
+
+# lock to serialize console output
+lock = threading.Lock()
+
+def do_work(item):
+    time.sleep(.1) # pretend to do some lengthy work.
+    # Make sure the whole print completes or threads can mix up output in one line.
+    with lock:
+        print(threading.current_thread().name,item)
+
+# The worker thread pulls an item from the queue and processes it
+def worker():
+    while True:
+        item = q.get()
+        do_work(item)
+        q.task_done()
+
+# Create the queue and thread pool.
+q = Queue()
+for i in range(4):
+     t = threading.Thread(target=worker)
+     t.daemon = True  # thread dies when main thread (only non-daemon thread) exits.
+     t.start()
+
+# stuff work items on the queue (in this case, just a number).
+start = time.perf_counter()
+for item in range(20):
+    q.put(item)
+
+q.join()       # block until all tasks are done
+
+# "Work" took .1 seconds per task.
+# 20 tasks serially would be 2 seconds.
+# With 4 threads should be about .5 seconds (contrived because non-CPU intensive "work")
+print('time:',time.perf_counter() - start)