Commit ac5cc082 authored by Jalin's avatar Jalin

增加 夜间休息限制

parent 3446bfc9
...@@ -2,16 +2,16 @@ ...@@ -2,16 +2,16 @@
import os import os
from threading import Thread from threading import Thread
from py12306.log.query_log import QueryLog from py12306.helpers.func import *
from py12306.query.query import Query from py12306.query.query import Query
from py12306.user.user import User from py12306.user.user import User
def main(): def main():
# Thread(target=Query.run).start() # 余票查询 # Thread(target=Query.run).start() # 余票查询
# QueryLog.add_log('init') create_thread_and_run(User, 'run', wait=False)
Query.run()
# Query.run() # Query.run()
User.run()
pass pass
......
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
...@@ -73,4 +73,17 @@ def current_thread_id(): ...@@ -73,4 +73,17 @@ def current_thread_id():
def time_now(): def time_now():
return datetime.datetime.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: # def test:
...@@ -4,6 +4,7 @@ from py12306.helpers.func import * ...@@ -4,6 +4,7 @@ from py12306.helpers.func import *
@singleton @singleton
class CommonLog(BaseLog): class CommonLog(BaseLog):
MESSAGE_12306_IS_CLOSED = '当前时间: {} | 12306 休息时间,程序将在明天早上 6 点自动运行'
def __init__(self): def __init__(self):
super().__init__() super().__init__()
......
...@@ -2,6 +2,7 @@ import threading ...@@ -2,6 +2,7 @@ import threading
from requests_html import HTMLSession from requests_html import HTMLSession
from py12306.helpers.app import app_available_check
from py12306.helpers.func import * from py12306.helpers.func import *
from py12306.log.query_log import QueryLog from py12306.log.query_log import QueryLog
from py12306.query.job import Job from py12306.query.job import Job
...@@ -25,6 +26,7 @@ class Query: ...@@ -25,6 +26,7 @@ class Query:
@classmethod @classmethod
def run(cls): def run(cls):
self = cls() self = cls()
app_available_check()
self.start() self.start()
pass pass
...@@ -32,13 +34,9 @@ class Query: ...@@ -32,13 +34,9 @@ class Query:
self.init_jobs() self.init_jobs()
QueryLog.print_init_jobs(jobs=self.jobs) QueryLog.print_init_jobs(jobs=self.jobs)
while True: while True:
threads = [] app_available_check()
if config.QUERY_JOB_THREAD_ENABLED: # 多线程 if config.QUERY_JOB_THREAD_ENABLED: # 多线程
for job in self.jobs: create_thread_and_run(jobs=self.jobs, callback_name='run')
thread = threading.Thread(target=job.run)
thread.start()
threads.append(thread)
for thread in threads: thread.join()
else: else:
for job in self.jobs: for job in self.jobs:
job.run() job.run()
......
...@@ -2,6 +2,7 @@ import pickle ...@@ -2,6 +2,7 @@ import pickle
from os import path 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.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.auth_code import AuthCode
from py12306.helpers.func import * from py12306.helpers.func import *
from py12306.helpers.request import Request from py12306.helpers.request import Request
...@@ -26,10 +27,10 @@ class UserJob: ...@@ -26,10 +27,10 @@ class UserJob:
self.user_name = info.get('user_name') self.user_name = info.get('user_name')
self.password = info.get('password') self.password = info.get('password')
self.user = user self.user = user
# load user
self.load_user()
def run(self): def run(self):
# load user
self.load_user()
self.start() self.start()
def start(self): def start(self):
...@@ -38,6 +39,7 @@ class UserJob: ...@@ -38,6 +39,7 @@ class UserJob:
:return: :return:
""" """
while True: while True:
app_available_check()
self.check_heartbeat() self.check_heartbeat()
sleep(self.heartbeat_interval) sleep(self.heartbeat_interval)
......
from py12306.helpers.app import *
from py12306.helpers.func import * from py12306.helpers.func import *
from py12306.log.user_log import UserLog from py12306.log.user_log import UserLog
from py12306.user.job import UserJob from py12306.user.job import UserJob
...@@ -14,21 +15,15 @@ class User: ...@@ -14,21 +15,15 @@ class User:
@classmethod @classmethod
def run(cls): def run(cls):
self = cls() self = cls()
app_available_check()
self.start() self.start()
pass pass
def start(self): def start(self):
self.init_users() self.init_users()
UserLog.print_init_users(users=self.users) UserLog.print_init_users(users=self.users)
while True: # 多线程维护用户
# 多线程维护用户 create_thread_and_run(jobs=self.users, callback_name='run', wait=False)
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()
def init_users(self): def init_users(self):
accounts = config.USER_ACCOUNTS accounts = config.USER_ACCOUNTS
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment