From e4b94aba778b1e638d25da9d7f6db6ac4555556e Mon Sep 17 00:00:00 2001
From: Samuel Gaist <samuel.gaist@idiap.ch>
Date: Wed, 17 Mar 2021 13:53:54 +0100
Subject: [PATCH] [test][prefix][algorithms] Workaround multiprocess changes in
 macOS Python 3.8

The default implementation for the multiprocess
changed from fork to spawn on macOS with Python
3.8. This merge request forces the use of fork
for the tests on macOS. The runner will anyway
use Linux so taking more time to solve this
particular issue would not make much sense.
---
 .../prefix/algorithms/autonomous/multiprocess/1.py | 14 +++++++++++---
 .../prefix/algorithms/sequential/multiprocess/1.py | 14 +++++++++++---
 2 files changed, 22 insertions(+), 6 deletions(-)

diff --git a/beat/backend/python/test/prefix/algorithms/autonomous/multiprocess/1.py b/beat/backend/python/test/prefix/algorithms/autonomous/multiprocess/1.py
index c000d7f..6a1f015 100755
--- a/beat/backend/python/test/prefix/algorithms/autonomous/multiprocess/1.py
+++ b/beat/backend/python/test/prefix/algorithms/autonomous/multiprocess/1.py
@@ -34,6 +34,8 @@
 ###################################################################################
 
 import multiprocessing
+import platform
+import sys
 
 
 def foo(queue_in, queue_out, index):
@@ -64,14 +66,20 @@ class Algorithm:
 
         num_thread = data_loader.count()
 
-        queue_in = multiprocessing.JoinableQueue(num_thread)
+        version = sys.version_info
+        if platform.system() == "Darwin" and version[0] == 3 and version[1] >= 8:
+            ctx = multiprocessing.get_context("fork")
+        else:
+            ctx = multiprocessing.get_context()
+
+        queue_in = ctx.JoinableQueue(num_thread)
         queue_out = []
 
         # Start worker processes
         jobs = []
         for i in range(num_thread):
-            queue_out.append(multiprocessing.Queue())
-            p = multiprocessing.Process(target=foo, args=(queue_in, queue_out[i], i))
+            queue_out.append(ctx.Queue())
+            p = ctx.Process(target=foo, args=(queue_in, queue_out[i], i))
             jobs.append(p)
             p.start()
 
diff --git a/beat/backend/python/test/prefix/algorithms/sequential/multiprocess/1.py b/beat/backend/python/test/prefix/algorithms/sequential/multiprocess/1.py
index f5389eb..cd2939f 100755
--- a/beat/backend/python/test/prefix/algorithms/sequential/multiprocess/1.py
+++ b/beat/backend/python/test/prefix/algorithms/sequential/multiprocess/1.py
@@ -34,6 +34,8 @@
 ###################################################################################
 
 import multiprocessing
+import platform
+import sys
 
 
 def foo(queue_in, queue_out, index):
@@ -64,14 +66,20 @@ class Algorithm:
 
         num_thread = data_loader.count()
 
-        queue_in = multiprocessing.JoinableQueue(num_thread)
+        version = sys.version_info
+        if platform.system() == "Darwin" and version[0] == 3 and version[1] >= 8:
+            ctx = multiprocessing.get_context("fork")
+        else:
+            ctx = multiprocessing.get_context()
+
+        queue_in = ctx.JoinableQueue(num_thread)
         queue_out = []
 
         # Start worker processes
         jobs = []
         for i in range(num_thread):
-            queue_out.append(multiprocessing.Queue())
-            p = multiprocessing.Process(target=foo, args=(queue_in, queue_out[i], i))
+            queue_out.append(ctx.Queue())
+            p = ctx.Process(target=foo, args=(queue_in, queue_out[i], i))
             jobs.append(p)
             p.start()
 
-- 
GitLab