From 2f94b6e02bd103d5a5a9cd55e40413d6549b4a50 Mon Sep 17 00:00:00 2001 From: 9700X_PC <9700X_PC@gmail.com> Date: Fri, 8 Nov 2024 16:42:06 +0900 Subject: [PATCH] =?UTF-8?q?toggle=5Fstats=20=EC=88=98=EC=A0=95=20=EC=A4=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- browser_control.py | 38 ++++++++++++++++++++++---------------- gui.py | 8 ++++---- 2 files changed, 26 insertions(+), 20 deletions(-) diff --git a/browser_control.py b/browser_control.py index b241d18d..ab3d9f06 100644 --- a/browser_control.py +++ b/browser_control.py @@ -1053,13 +1053,14 @@ class BrowserController(QThread): await self.scroll_page_to_top() self.logger.debug(f'1페이지가 아니므로 상품의 동적로딩을 위해 휠 스크롤 업') - if not self.toggle_states['ed_mode']: + is_ed_mode = self.toggle_states.get['ed_mode'] + if not is_ed_mode: # 4. 현재 페이지의 모든 "세부사항 수정 및 업로드" 버튼 찾기 self.logger.debug('수정모드가 아니므로 상품수정 버튼 elements를 수집합니다.') product_buttons = await self.get_product_edit_buttons_by_templete() else: self.logger.debug('상품정보 수집') - product_infos, product_name_elements = await self.collect_product_info(items_per_page, ed_mode=self.toggle_states['ed_mode']) + product_infos, product_name_elements = await self.collect_product_info(items_per_page, ed_mode=is_ed_mode) self.logger.debug(f"product_infos : {product_infos}") self.logger.debug('수정모드이므로 상품명 elements를 수정버튼으로 활용합니다.') product_buttons = product_name_elements @@ -1070,7 +1071,8 @@ class BrowserController(QThread): self.logger.debug('수정할 상품이 없습니다. 작업을 종료합니다.') break - if self.toggle_states['recovery_mode']: + is_recovery_mode = self.toggle_states.get['recovery_mode'] + if is_recovery_mode: deleted_imgs = self.deleted_img_urls_from_logs() # 5. 각 상품에 대해 상품수정작업 수행 @@ -1094,6 +1096,8 @@ class BrowserController(QThread): product_category = await self.titleHandler.get_category(market='ss') # 카테고리 가져오기 # 옵션 수정 + is_optionTrnas = self.toggle_states.get['optionTrnas'] + if self.toggle_states['optionTrnas'] or self.toggle_states['optionIMGTrans'] or self.toggle_states['optionAutoSelect']: self.logger.debug(f"옵션수정 : optionTrnas={self.toggle_states['optionTrnas']} + optionIMGTrans={self.toggle_states['optionIMGTrans']} + optionAutoSelect{self.toggle_states['optionAutoSelect']}") await self.edit_option(product_name) @@ -1244,30 +1248,22 @@ class BrowserController(QThread): # 이벤트 루프를 유지하여 외부에서 작업 추가 가능 self.loop.run_forever() - def start_browser_task(self): """이벤트 루프에서 브라우저 초기화 작업 추가""" self.logger.debug("start_browser_task - 브라우저 초기화 작업 시작") - # 비동기 작업을 이벤트 루프에 안전하게 추가 + # 실행 중인 이벤트 루프에 비동기 작업 추가 if self.loop and not self.loop.is_closed(): - future = asyncio.run_coroutine_threadsafe(self.start_browser_async(), self.loop) + asyncio.run_coroutine_threadsafe(self.start_browser_async(), self.loop) + self.browser_task_started = True # 작업 실행 플래그 설정 self.logger.debug("start_browser_task - 비동기 작업이 추가되었습니다.") - - # 작업 성공 여부 확인 - try: - result = future.result(timeout=10) # 10초 내에 완료되지 않으면 타임아웃 - self.logger.debug(f"start_browser_task - 작업이 성공적으로 완료되었습니다: {result}") - except Exception as e: - self.logger.error(f"start_browser_task - 비동기 작업 실패: {str(e)}") else: - self.logger.error("start_browser_task - 이벤트 루프를 생성할 수 없습니다.") - + self.logger.error("start_browser_task - 실행 중인 이벤트 루프가 없습니다.") def start_PercentyJob_task(self): """번역 작업을 이벤트 루프에서 실행""" # 이벤트 루프가 없거나 닫혀 있으면 새로 생성 - self.initialize_event_loop() + # self.initialize_event_loop() if self.loop and not self.loop.is_closed(): # 이미 실행 중인 이벤트 루프에 번역 작업 추가 @@ -1275,6 +1271,16 @@ class BrowserController(QThread): else: self.logger.error("이벤트 루프가 초기화되지 않았거나 이미 종료되었습니다.") + def initialize_event_loop(self): + """이벤트 루프가 없거나 닫힌 경우 새로 생성""" + if not self.loop or self.loop.is_closed(): + self.logger.debug("initialize_event_loop - 새로운 이벤트 루프 생성 중") + self.loop = asyncio.new_event_loop() + asyncio.set_event_loop(self.loop) + self.logger.debug("initialize_event_loop - 이벤트 루프가 생성되었습니다.") + else: + self.logger.debug("initialize_event_loop - 기존 이벤트 루프 사용 중") + def stop(self): """스레드 종료 시 Playwright 리소스 정리 및 이벤트 루프 종료""" if self.browser: diff --git a/gui.py b/gui.py index 8ad6b174..d94f0530 100644 --- a/gui.py +++ b/gui.py @@ -744,7 +744,7 @@ class AutoPercentyGUI(QWidget): time.sleep(1) - if not self.browser_controller.isRunning(): + if self.browser_controller.isRunning(): # 스레드를 처음 시작하여 이벤트 루프를 실행 # self.browser_controller.start() # QThread의 start() 호출로 run() 실행 self.logger.debug("브라우저 스레드가 시작되었습니다.") @@ -766,7 +766,7 @@ class AutoPercentyGUI(QWidget): # 스레드 시작 self.browser_controller.start_browser_task() else: - self.logger.warning("브라우저 스레드는 이미 실행 중입니다.") + self.logger.warning("브라우저 스레드가 실행중이지 않습니다.") @Slot() def on_browser_started(self): @@ -792,12 +792,12 @@ class AutoPercentyGUI(QWidget): @Slot() def on_start_PercentyJob_clicked(self): """상품수정 스레드 시작 및 상태 전달""" - if not self.browser_controller.isRunning(): + if self.browser_controller.isRunning(): # 스레드 시작 self.browser_controller.start_PercentyJob_task() self.logger.info("상품수정 작업 스레드가 시작되었습니다.") else: - self.logger.info("상품수정 작업 스레드는 이미 실행 중입니다.") + self.logger.info("브라우저 스레드가 없습니다.") @Slot()