Use "spawn" multiprocessing start method (#1279)

workaround https://bugs.python.org/issue6721

Fixes #1278
This commit is contained in:
Maciej Kowalczyk
2019-11-15 10:56:18 +01:00
committed by Alexander Kukushkin
parent 66d77697ae
commit efcd05ace2
2 changed files with 9 additions and 0 deletions
+8
View File
@@ -176,6 +176,13 @@ def fatal(string, *args):
sys.exit(1)
def use_spawn_start_method():
if sys.version_info >= (3, 4):
# The default, forking, method is not a good idea in a multithreaded process: https://bugs.python.org/issue6721
import multiprocessing
multiprocessing.set_start_method('spawn')
def check_psycopg2():
min_psycopg2 = (2, 5, 4)
min_psycopg2_str = '.'.join(map(str, min_psycopg2))
@@ -198,6 +205,7 @@ def check_psycopg2():
def main():
use_spawn_start_method()
check_psycopg2()
if os.getpid() != 1:
return patroni_main()
+1
View File
@@ -83,6 +83,7 @@ class TestPatroni(unittest.TestCase):
@patch('os.getpid')
@patch('multiprocessing.Process')
@patch('patroni.use_spawn_start_method', Mock())
@patch('patroni.patroni_main', Mock())
def test_patroni_main(self, mock_process, mock_getpid):
mock_getpid.return_value = 2