From ac5cc0824aa1b003ff87b0c58b13eede3660c193 Mon Sep 17 00:00:00 2001 From: Jalin Date: Sun, 6 Jan 2019 23:45:41 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=20=E5=A4=9C=E9=97=B4?= =?UTF-8?q?=E4=BC=91=E6=81=AF=E9=99=90=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.py | 6 +++--- py12306/helpers/app.py | 13 +++++++++++++ py12306/helpers/func.py | 13 +++++++++++++ py12306/log/common_log.py | 1 + py12306/query/query.py | 10 ++++------ py12306/user/job.py | 6 ++++-- py12306/user/user.py | 13 ++++--------- 7 files changed, 42 insertions(+), 20 deletions(-) create mode 100644 py12306/helpers/app.py diff --git a/main.py b/main.py index be540e4..2e24645 100644 --- a/main.py +++ b/main.py @@ -2,16 +2,16 @@ import os from threading import Thread -from py12306.log.query_log import QueryLog +from py12306.helpers.func import * from py12306.query.query import Query from py12306.user.user import User def main(): # Thread(target=Query.run).start() # 余票查询 - # QueryLog.add_log('init') + create_thread_and_run(User, 'run', wait=False) + Query.run() # Query.run() - User.run() pass diff --git a/py12306/helpers/app.py b/py12306/helpers/app.py new file mode 100644 index 0000000..ef3e75d --- /dev/null +++ b/py12306/helpers/app.py @@ -0,0 +1,13 @@ +from py12306.helpers.func import * +from py12306.log.common_log import CommonLog + + +def app_available_check(): + now = time_now() + if now.hour >= 23 or now.hour < 6: + CommonLog.add_quick_log(CommonLog.MESSAGE_12306_IS_CLOSED.format(time_now())).flush() + open_time = datetime.datetime(now.year, now.month, now.day, 6) + if open_time < now: + open_time += datetime.timedelta(1) + sleep((open_time - now).seconds) + return True diff --git a/py12306/helpers/func.py b/py12306/helpers/func.py index 60bd4ab..c6f11af 100644 --- a/py12306/helpers/func.py +++ b/py12306/helpers/func.py @@ -73,4 +73,17 @@ def current_thread_id(): def time_now(): return datetime.datetime.now() + + +def create_thread_and_run(jobs, callback_name, wait=True): + threads = [] + if not isinstance(jobs, list): + jobs = [jobs] + for job in jobs: + thread = threading.Thread(target=getattr(job, callback_name)) + thread.start() + threads.append(thread) + if wait: + for thread in threads: thread.join() + # def test: diff --git a/py12306/log/common_log.py b/py12306/log/common_log.py index de0868e..326bcfb 100644 --- a/py12306/log/common_log.py +++ b/py12306/log/common_log.py @@ -4,6 +4,7 @@ from py12306.helpers.func import * @singleton class CommonLog(BaseLog): + MESSAGE_12306_IS_CLOSED = '当前时间: {} | 12306 休息时间,程序将在明天早上 6 点自动运行' def __init__(self): super().__init__() diff --git a/py12306/query/query.py b/py12306/query/query.py index 4942b08..9f1158a 100644 --- a/py12306/query/query.py +++ b/py12306/query/query.py @@ -2,6 +2,7 @@ import threading from requests_html import HTMLSession +from py12306.helpers.app import app_available_check from py12306.helpers.func import * from py12306.log.query_log import QueryLog from py12306.query.job import Job @@ -25,6 +26,7 @@ class Query: @classmethod def run(cls): self = cls() + app_available_check() self.start() pass @@ -32,13 +34,9 @@ class Query: self.init_jobs() QueryLog.print_init_jobs(jobs=self.jobs) while True: - threads = [] + app_available_check() if config.QUERY_JOB_THREAD_ENABLED: # 多线程 - for job in self.jobs: - thread = threading.Thread(target=job.run) - thread.start() - threads.append(thread) - for thread in threads: thread.join() + create_thread_and_run(jobs=self.jobs, callback_name='run') else: for job in self.jobs: job.run() diff --git a/py12306/user/job.py b/py12306/user/job.py index a6251bb..5a5b963 100644 --- a/py12306/user/job.py +++ b/py12306/user/job.py @@ -2,6 +2,7 @@ import pickle from os import path from py12306.helpers.api import API_USER_CHECK, API_BASE_LOGIN, API_AUTH_UAMTK, API_AUTH_UAMAUTHCLIENT, API_USER_INFO +from py12306.helpers.app import * from py12306.helpers.auth_code import AuthCode from py12306.helpers.func import * from py12306.helpers.request import Request @@ -26,10 +27,10 @@ class UserJob: self.user_name = info.get('user_name') self.password = info.get('password') self.user = user - # load user - self.load_user() def run(self): + # load user + self.load_user() self.start() def start(self): @@ -38,6 +39,7 @@ class UserJob: :return: """ while True: + app_available_check() self.check_heartbeat() sleep(self.heartbeat_interval) diff --git a/py12306/user/user.py b/py12306/user/user.py index 2e5f945..77e8c9e 100644 --- a/py12306/user/user.py +++ b/py12306/user/user.py @@ -1,3 +1,4 @@ +from py12306.helpers.app import * from py12306.helpers.func import * from py12306.log.user_log import UserLog from py12306.user.job import UserJob @@ -14,21 +15,15 @@ class User: @classmethod def run(cls): self = cls() + app_available_check() self.start() pass def start(self): self.init_users() UserLog.print_init_users(users=self.users) - while True: - # 多线程维护用户 - threads = [] - for user in self.users: - thread = threading.Thread(target=user.run) - thread.start() - threads.append(thread) - # user.run() - for thread in threads: thread.join() + # 多线程维护用户 + create_thread_and_run(jobs=self.users, callback_name='run', wait=False) def init_users(self): accounts = config.USER_ACCOUNTS