From f482164c16dc977de51f42f64ba4425c5173ff4b Mon Sep 17 00:00:00 2001 From: PAN Lei Date: Mon, 25 Jul 2022 14:21:12 +0200 Subject: [PATCH] need to test singleton --- main.py | 10 ++++----- src/check_results.py | 7 +----- src/workers/TlsPlaywright.py | 40 +++++++++++++++++++++++++++++++++++ src/workers/commandor_page.py | 8 ++----- 4 files changed, 48 insertions(+), 17 deletions(-) create mode 100644 src/workers/TlsPlaywright.py diff --git a/main.py b/main.py index 03ca4a0..9d810ea 100644 --- a/main.py +++ b/main.py @@ -2,7 +2,7 @@ import logging import sys from concurrent.futures import ThreadPoolExecutor -from src import params, definitions +from src import params from src.db.mongo_manager import MONGO_STORE_MANAGER from src.logs.AppLogging import init_logger from src.pojo.ModeEnum import ModeEnum @@ -40,7 +40,7 @@ def start_book(start_number, end_number, store_choose_state=0, max_workers=20, p def recheck_the_captcha_error_contacts(on_no_contact_found, store_type=0, mode: ModeEnum = ModeEnum.MANUAL, - max_workers=20): + max_workers=20, headless=False): # get all the contacts in captcha error contact_list = MONGO_STORE_MANAGER.get_captcha_error_contacts_for_current_day() if len(contact_list) == 0: @@ -51,7 +51,7 @@ def recheck_the_captcha_error_contacts(on_no_contact_found, store_type=0, mode: proxy = get_proxy() # start the task in thread executor.submit( - CommandorPage(contact, store_type=store_type, mode=mode).start_page, + CommandorPage(contact, store_type=store_type, mode=mode, headless= headless).start_page, proxy) @@ -61,5 +61,5 @@ def get_proxy(proxy_type=ProxyType.BRIGHT_DATA): if __name__ == '__main__': # 修改联系人行,结束联系人行 第三个参数store等于0的时候是随机,传入1的时候是总店 - start_book(901, 1200, store_choose_state=1, mode=ModeEnum.AUTOMATIC, headless=True) - # recheck_the_captcha_error_contacts(store_type=1, mode=ModeEnum.AUTOMATIC, on_no_contact_found=lambda: None) + # start_book(1, 100, store_choose_state=1, mode=ModeEnum.AUTOMATIC, headless=True) + recheck_the_captcha_error_contacts(store_type=1, mode=ModeEnum.AUTOMATIC, on_no_contact_found=lambda: None, headless=True) diff --git a/src/check_results.py b/src/check_results.py index e26c22f..f64c4a1 100644 --- a/src/check_results.py +++ b/src/check_results.py @@ -17,6 +17,7 @@ from src.pojo.ReserveResultPojo import ReserveResultPojo from src.pojo.ResultEnum import ResultEnum from src.proxy.proxy_type import ProxyType from src import definitions, params +from src.workers.TlsPlaywright import TlsPlaywright SORRY_SENTENCE_FR = "nous sommes sincèrement désolés de n'avoir pu vous satisfaire cette fois-ci" SORRY_SENTENCE_EN = "we are extremely sorry that we were not able to fulfill" @@ -31,12 +32,6 @@ mailer = Mailer() oracle_log_sender = LogSender() -class TlsPlaywright(threading.local): - def __init__(self) -> None: - self.playwright = sync_playwright().start() - print("创建浏览器实例,线程: ", threading.current_thread().name) - - class ResultChecker: tls = TlsPlaywright() diff --git a/src/workers/TlsPlaywright.py b/src/workers/TlsPlaywright.py new file mode 100644 index 0000000..798355f --- /dev/null +++ b/src/workers/TlsPlaywright.py @@ -0,0 +1,40 @@ +import threading + +from playwright.sync_api import sync_playwright + + +class OnlyOne: + class __OnlyOne: + def __init__(self, arg): + self.val = arg + + def __str__(self): + return repr(self) + self.val + + instance = None + + def __init__(self, arg): + if not OnlyOne.instance: + OnlyOne.instance = OnlyOne.__OnlyOne(arg) + else: + OnlyOne.instance.val = arg + + def __getattr__(self, name): + return getattr(self.instance, name) + + +class TlsPlaywright(): + # private nested inner class + class __TlsPlaywrightSingleton(threading.local): + def __init__(self) -> None: + self.playwright = sync_playwright().start() + print("创建浏览器实例,线程: ", threading.current_thread().name) + + playwright = None + + def __init__(self): + if not TlsPlaywright.playwright: + TlsPlaywright.playwright = TlsPlaywright.__TlsPlaywrightSingleton().playwright + + def __getattr__(self, name): + return getattr(self.playwright, name) diff --git a/src/workers/commandor_page.py b/src/workers/commandor_page.py index 4fa3552..ed37f19 100644 --- a/src/workers/commandor_page.py +++ b/src/workers/commandor_page.py @@ -17,6 +17,7 @@ from src.pojo.ReserveResultPojo import ReserveResultPojo, PublishType from src.pojo.contact_pojo import ContactPojo from src.proxy.proxy_type import ProxyType from src.workers.SolveCaptch import SolveCaptcha +from src.workers.TlsPlaywright import TlsPlaywright RDV_URL = "https://rendezvousparis.hermes.com/client/register" @@ -46,13 +47,8 @@ def get_random_wait_time() -> float: return wait_time -class Tls(threading.local): - def __init__(self) -> None: - self.playwright = sync_playwright().start() - - class CommandorPage: - tls = Tls() + tls = TlsPlaywright() def __init__(self, contact: ContactPojo, store_type=0, proxy_type=ProxyType.BRIGHT_DATA, mode: ModeEnum = ModeEnum.MANUAL, headless=False):