77
88from types import ModuleType
99
10- from awaiter import MultiThreadExecutor
1110from tremolo .exceptions import BadRequest , NotFound , Forbidden
1211from tremolo .lib .websocket import WebSocket
1312from tremolo .utils import html_escape
2221class HTTPOut :
2322 def __init__ (self , app ):
2423 app .add_hook (self ._on_worker_start , 'worker_start' )
25- app .add_hook (self ._on_worker_stop , 'worker_stop ' )
24+ app .add_hook (self ._on_close , 'close ' )
2625 app .add_middleware (self ._on_request , 'request' , priority = 9999 ) # low
27- app .add_middleware (self ._on_close , 'close' )
2826
2927 async def _on_worker_start (self , ** worker ):
3028 loop = worker ['loop' ]
3129 logger = worker ['logger' ]
3230 g = worker ['globals' ]
33- thread_pool_size = g .options .get ('thread_pool_size' , 5 )
3431 document_root = os .path .abspath (
3532 g .options .get ('document_root' , os .getcwd ())
3633 )
@@ -152,17 +149,10 @@ def ho_import(name, globals=None, locals=None, fromlist=(), level=0):
152149
153150 g .wait = wait
154151 g .caches = {}
155- g .executor = MultiThreadExecutor (thread_pool_size )
156- g .executor .start ()
157152
158153 if module :
159154 exec_module (module )
160155
161- async def _on_worker_stop (self , ** worker ):
162- g = worker ['globals' ]
163-
164- await g .executor .shutdown ()
165-
166156 async def _on_request (self , ** server ):
167157 request = server ['request' ]
168158 response = server ['response' ]
@@ -258,7 +248,8 @@ async def _on_request(self, **server):
258248
259249 try :
260250 # execute module in another thread
261- result = await g .executor .submit (exec_module , module , code )
251+ result = await g .executor .submit (exec_module ,
252+ args = (module , code ))
262253 await server ['response' ].join ()
263254
264255 if result :
@@ -273,7 +264,8 @@ async def _on_request(self, **server):
273264 await server ['response' ].handle_exception (exc )
274265 finally :
275266 await g .executor .submit (
276- cleanup_modules , server ['modules' ], g .options ['debug' ]
267+ cleanup_modules ,
268+ args = (server ['modules' ], g .options ['debug' ])
277269 )
278270 await server ['response' ].join ()
279271 server ['modules' ].clear ()
@@ -285,9 +277,8 @@ async def _on_request(self, **server):
285277 raise Forbidden (f'Disallowed file extension: { ext } ' )
286278
287279 logger .info ('%s -> %s: %s' , path , mime_types [ext ], module_path )
288- await response .sendfile (
289- module_path , content_type = mime_types [ext ], executor = g .executor
290- )
280+ await response .sendfile (module_path , content_type = mime_types [ext ])
281+
291282 # exit middleware without closing the connection
292283 return True
293284
0 commit comments