diff Sphinx/source/plugins/python/multiprocessing-2.py @ 702:6e02cd89eb6a

moving python samples in separate files
author Sebastien Jodogne <s.jodogne@gmail.com>
date Fri, 11 Jun 2021 09:38:15 +0200
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Sphinx/source/plugins/python/multiprocessing-2.py	Fri Jun 11 09:38:15 2021 +0200
@@ -0,0 +1,31 @@
+import math
+import multiprocessing
+import orthanc
+import signal
+import time
+
+# CPU-intensive computation taking about 4 seconds
+# (same code as above)
+def SlowComputation():
+    start = time.time()
+    for i in range(1000):
+        for j in range(30000):
+            math.sqrt(float(j))
+    end = time.time()
+    duration = (end - start)
+    return 'computation done in %.03f seconds\n' % duration
+
+# Ignore CTRL+C in the slave processes
+def Initializer():
+    signal.signal(signal.SIGINT, signal.SIG_IGN)
+
+# Create a pool of 4 slave Python interpreters
+POOL = multiprocessing.Pool(4, initializer = Initializer)
+
+def OnRest(output, uri, **request):
+    # Offload the call to "SlowComputation" onto one slave process.
+    # The GIL is unlocked until the slave sends its answer back.
+    answer = POOL.apply(SlowComputation)
+    output.AnswerBuffer(answer, 'text/plain')
+
+orthanc.RegisterRestCallback('/computation', OnRest)