Skip to content

Commit bb185c6

Browse files
committed
Refine process execution.
1 parent 980229f commit bb185c6

File tree

2 files changed

+28
-20
lines changed

2 files changed

+28
-20
lines changed

lambda_local/__init__.py

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,7 @@
1919

2020
def main():
2121
args = parse_args()
22-
23-
p = Process(target=run, args=(args,))
24-
p.start()
25-
p.join()
26-
27-
sys.exit(p.exitcode)
22+
run(args)
2823

2924

3025
def parse_args():

lambda_local/main.py

Lines changed: 27 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,10 @@
88
import traceback
99
import json
1010
import logging
11-
import uuid
1211
import os
1312
import timeit
1413
from botocore.vendored.requests.packages import urllib3
14+
import multiprocessing
1515

1616
from . import event
1717
from . import context
@@ -68,28 +68,28 @@ def run(args):
6868

6969
def _runner(func, event, context):
7070
logger = logging.getLogger()
71-
log_filter = ContextFilter(context)
72-
logger.addFilter(log_filter)
73-
74-
result = None
7571

7672
logger.info("Event: {}".format(event))
77-
logger.info("START RequestId: {}".format(context.aws_request_id))
73+
logger.info("START RequestId: {} Version: {}".format(
74+
context.aws_request_id, context.function_version))
7875

79-
start_time = timeit.default_timer()
80-
result, err_type = execute(func, event, context)
81-
end_time = timeit.default_timer()
76+
queue = multiprocessing.Queue()
77+
p = multiprocessing.Process(
78+
target=execute_in_process,
79+
args=(queue, func, event, context,))
80+
p.start()
81+
(result, err_type, duration) = queue.get()
82+
p.join()
8283

8384
logger.info("END RequestId: {}".format(context.aws_request_id))
85+
duration = "{0:.2f} ms".format(duration)
86+
logger.info("REPORT RequestId: {}\tDuration: {}".format(
87+
context.aws_request_id, duration))
8488
if type(result) is TimeoutException:
8589
logger.error("RESULT:\n{}".format(result))
8690
else:
8791
logger.info("RESULT:\n{}".format(result))
8892

89-
duration = "{0:.2f} ms".format((end_time - start_time) * 1000)
90-
logger.info("REPORT RequestId: {}\tDuration: {}".format(
91-
context.aws_request_id, duration))
92-
9393
return (result, err_type)
9494

9595

@@ -112,9 +112,13 @@ def load(request_id, path, function_name):
112112
def execute(func, event, context):
113113
err_type = None
114114

115+
logger = logging.getLogger()
116+
log_filter = ContextFilter(context)
117+
logger.addFilter(log_filter)
118+
115119
try:
116120
with time_limit(context._timeout_in_seconds):
117-
result = func(event, context.activate())
121+
result = func(event, context._activate())
118122
except TimeoutException as err:
119123
result = err
120124
err_type = ERR_TYPE_TIMEOUT
@@ -128,3 +132,12 @@ def execute(func, event, context):
128132
err_type = ERR_TYPE_EXCEPTION
129133

130134
return result, err_type
135+
136+
137+
def execute_in_process(queue, func, event, context):
138+
start_time = timeit.default_timer()
139+
result, err_type = execute(func, event, context)
140+
end_time = timeit.default_timer()
141+
duration = (end_time - start_time) * 1000
142+
143+
queue.put((result, err_type, duration))

0 commit comments

Comments
 (0)