88import traceback
99import json
1010import logging
11- import uuid
1211import os
1312import timeit
1413from botocore .vendored .requests .packages import urllib3
14+ import multiprocessing
1515
1616from . import event
1717from . import context
@@ -68,28 +68,28 @@ def run(args):
6868
6969def _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: {}\t Duration: {}" .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: {}\t Duration: {}" .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):
112112def 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