Skip to content

Commit a28d3c9

Browse files
committed
opt when browser crash, make a new browser
1 parent e7d72af commit a28d3c9

File tree

1 file changed

+15
-3
lines changed

1 file changed

+15
-3
lines changed

dtable_events/convert_page/manager.py

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)