1414import threading
1515import time
1616import os
17- import traceback
1817from typing import List , Dict , Optional , Any , Tuple
1918from concurrent .futures import Future , wait as wait_futures , FIRST_EXCEPTION
2019import queue
2726logger = logging .getLogger (__name__ )
2827
2928
30- class TaskCancelled (Exception ):
31- pass
32-
33-
3429class RobustPlaywrightManager :
3530 """
3631 Manager runs a background worker thread that owns an asyncio loop and Playwright.
@@ -157,8 +152,8 @@ def _thread_main(self):
157152 """Thread target: setup and run asyncio event loop."""
158153 try :
159154 asyncio .run (self ._worker_main ())
160- except Exception :
161- traceback . print_exc ( )
155+ except Exception as e :
156+ logger . exception ( e )
162157 finally :
163158 self ._worker_ready .clear ()
164159
@@ -167,17 +162,17 @@ async def _worker_main(self):
167162 self ._loop = asyncio .get_event_loop ()
168163 try :
169164 self ._playwright = await async_playwright ().start ()
170- except Exception :
171- traceback . print_exc ( )
165+ except Exception as e :
166+ logger . exception ( e )
172167 raise
173168
174169 # launch browsers
175170 self ._browsers = [None ] * self .num_browsers
176171 for i in range (self .num_browsers ):
177172 try :
178173 self ._browsers [i ] = await self ._launch_browser (i )
179- except Exception :
180- traceback . print_exc ( )
174+ except Exception as e :
175+ logger . exception ( e )
181176 self ._browsers [i ] = None
182177
183178 # slot queue contains browser indices for available page slots
@@ -254,8 +249,8 @@ async def _health_monitor(self):
254249 }
255250 except asyncio .CancelledError :
256251 return
257- except Exception :
258- traceback . print_exc ( )
252+ except Exception as e :
253+ logger . exception ( e )
259254
260255 def _aggregate_browser_process_stats (self ) -> Tuple [float , float ]:
261256 try :
@@ -294,8 +289,8 @@ async def _consumer_loop(self):
294289 asyncio .create_task (self ._handle_task (task_dict , fut ))
295290 except asyncio .CancelledError :
296291 break
297- except Exception :
298- traceback . print_exc ( )
292+ except Exception as e :
293+ logger . exception ( e )
299294 await asyncio .sleep (0.1 )
300295
301296 async def _handle_task (self , task : Dict [str , Any ], fut : Future ):
@@ -374,5 +369,16 @@ async def _handle_task(self, task: Dict[str, Any], fut: Future):
374369def get_playwright_manager ():
375370 global playwright_manager
376371 if not playwright_manager :
377- playwright_manager = RobustPlaywrightManager ()
372+ try :
373+ num_browsers = int (os .environ .get ('CONVERT_PDF_BROWSERS' , '2' ))
374+ except :
375+ num_browsers = 2
376+ try :
377+ pages_per_browser = int (os .environ .get ('CONVERT_PDF_PAGES_PER_BROWSER' , '3' ))
378+ except :
379+ pages_per_browser = 3
380+ playwright_manager = RobustPlaywrightManager (
381+ num_browsers = num_browsers ,
382+ pages_per_browser = pages_per_browser
383+ )
378384 return playwright_manager
0 commit comments