22Copyright 2025 Amazon.com, Inc. or its affiliates. All Rights Reserved.
33"""
44
5- import threading
5+ import multiprocessing
66import unittest
77from unittest .mock import patch , MagicMock
88
@@ -18,23 +18,22 @@ def setUp(self):
1818 self .socket = "/tmp/sock"
1919
2020 def test_success_and_failure_isolation (self ):
21- success_counter = 0
22- fail_counter = 0
23- process_index = 0
24- lock = threading . Lock ( )
21+ multiprocessing . set_start_method ( "fork" , force = True )
22+ success_counter = multiprocessing . Value ( "i" , 0 )
23+ fail_counter = multiprocessing . Value ( "i" , 0 )
24+ process_index = multiprocessing . Value ( "i" , 0 )
2525
2626 def fake_bootstrap_run (handler , lambda_runtime_client ):
27- nonlocal success_counter , fail_counter , process_index
28- with lock :
29- idx = process_index
30- process_index += 1
27+ with process_index .get_lock ():
28+ idx = process_index .value
29+ process_index .value += 1
3130 if idx % 2 == 0 :
3231 for _ in range (3 ):
33- with lock :
34- success_counter += 1
32+ with success_counter . get_lock () :
33+ success_counter . value += 1
3534 else :
36- with lock :
37- fail_counter += 1
35+ with fail_counter . get_lock () :
36+ fail_counter . value += 1
3837 raise RuntimeError ("Simulated failure" )
3938
4039 with patch (
@@ -44,19 +43,12 @@ def fake_bootstrap_run(handler, lambda_runtime_client):
4443 side_effect = fake_bootstrap_run ,
4544 ):
4645 # spawn 4 multi-concurrent processes
47- threads = []
48- for _ in range (4 ):
49- t = threading .Thread (
50- target = MultiConcurrentRunner .run_single ,
51- args = (self .handler , self .addr , self .use_thread , self .socket ),
52- )
53- t .start ()
54- threads .append (t )
55- for t in threads :
56- t .join ()
57-
58- self .assertEqual (success_counter , 6 )
59- self .assertEqual (fail_counter , 2 )
46+ MultiConcurrentRunner .run_concurrent (
47+ self .handler , self .addr , self .use_thread , self .socket , max_concurrency = 4
48+ )
49+
50+ self .assertEqual (success_counter .value , 6 )
51+ self .assertEqual (fail_counter .value , 2 )
6052
6153
6254if __name__ == "__main__" :
0 commit comments