@@ -28,16 +28,29 @@ def __init__(self, index, task_queue: Queue, pages=10):
2828 self .context = None
2929 self .pages = pages
3030
31+ self .is_browser_alive = False
32+
3133 self .loop = asyncio .new_event_loop () # each thread has own event loop
3234
35+ def disconnect_browser_cb (self ):
36+ self .is_browser_alive = False
37+ self .browser = None
38+ self .context = None
39+ logger .error (f"Thread-{ self .thread_id } browser disconnected... will use new browser" )
40+
3341 async def get_context (self ):
42+ if not self .is_browser_alive :
43+ logger .info (f"Thread-{ self .thread_id } browser make a new browser..." )
44+
3445 if self .context :
3546 return self .context
3647
3748 if not self .playwright :
3849 self .playwright = await async_playwright ().start ()
3950 if not self .browser :
51+ self .is_browser_alive = True
4052 self .browser = await self .playwright .chromium .launch (headless = True )
53+ self .browser .on ('disconnected' , self .disconnect_browser_cb )
4154 self .context = await self .browser .new_context ()
4255 return self .context
4356
@@ -134,15 +147,14 @@ async def convert_with_rows(self, task_info, resources):
134147 table = resources .get ('table' )
135148 target_column = resources .get ('target_column' )
136149
137- context = await self .get_context ()
138-
139150 # convert
140151 # open all tabs of rows pages by pages
141152 # wait render and convert to pdf one by one
142153 pages = self .pages
143154 dtable_server_api = DTableServerAPI ('dtable-events' , dtable_uuid , dtable_server_url )
144155 for i in range (0 , len (row_ids ), pages ):
145156 tasks = []
157+ context = await self .get_context ()
146158 # open rows
147159 for row_id in row_ids [i : i + pages ]:
148160 url = ''
@@ -157,7 +169,7 @@ async def convert_with_rows(self, task_info, resources):
157169 results = await asyncio .gather (* tasks , return_exceptions = True )
158170 for result in results :
159171 if isinstance (result , Exception ):
160- logger .exception (result )
172+ logger .exception (f'Thread- { self . thread_id } convert rows error: { e } ' )
161173
162174 # callbacks
163175 if action_type == 'convert_page_to_pdf' :
0 commit comments