22Copyright 2025 Amazon.com, Inc. or its affiliates. All Rights Reserved.
33"""
44
5- import multiprocessing
5+ import threading
66import unittest
77from unittest .mock import patch , MagicMock
88
@@ -18,38 +18,41 @@ def setUp(self):
1818 self .socket = "/tmp/sock"
1919
2020 def test_success_and_failure_isolation (self ):
21- manager = multiprocessing .Manager ()
22- success_counter = manager .Value ("i" , 0 )
23- fail_counter = manager .Value ("i" , 0 )
24- process_index = manager .Value ("i" , 0 )
25- lock = manager .Lock ()
21+ success_counter = 0
22+ fail_counter = 0
23+ process_index = 0
24+ lock = threading .Lock ()
2625
2726 def fake_bootstrap_run (handler , lambda_runtime_client ):
27+ nonlocal success_counter , fail_counter , process_index
2828 with lock :
29- idx = process_index . value
30- process_index . value += 1
29+ idx = process_index
30+ process_index += 1
3131 if idx % 2 == 0 :
3232 for _ in range (3 ):
3333 with lock :
34- success_counter . value += 1
34+ success_counter += 1
3535 else :
3636 with lock :
37- fail_counter . value += 1
37+ fail_counter += 1
3838 raise RuntimeError ("Simulated failure" )
3939
4040 with patch (
4141 "awslambdaric.lambda_multi_concurrent_utils.MultiConcurrentRunner._redirect_output"
4242 ), patch (
4343 "awslambdaric.lambda_multi_concurrent_utils.bootstrap.run" ,
4444 side_effect = fake_bootstrap_run ,
45+ ), patch (
46+ "awslambdaric.lambda_multi_concurrent_utils.multiprocessing.Process" ,
47+ threading .Thread ,
4548 ):
49+ # spawn 4 multi-concurrent processes
4650 MultiConcurrentRunner .run_concurrent (
4751 self .handler , self .addr , self .use_thread , self .socket , max_concurrency = 4
4852 )
4953
50- self .assertEqual (success_counter .value , 6 )
51- self .assertEqual (fail_counter .value , 2 )
52- manager .shutdown ()
54+ self .assertEqual (success_counter , 6 )
55+ self .assertEqual (fail_counter , 2 )
5356
5457
5558if __name__ == "__main__" :
0 commit comments