49 lines
1.7 KiB
Python
49 lines
1.7 KiB
Python
from py12306.helpers.func import *
|
|
from py12306.config import Config
|
|
|
|
|
|
@singleton
|
|
class Event():
|
|
"""
|
|
处理事件
|
|
"""
|
|
# 事件
|
|
KEY_JOB_DESTROY = 'job_destroy'
|
|
KEY_USER_JOB_DESTROY = 'user_job_destroy'
|
|
KEY_USER_LOADED = 'user_loaded'
|
|
cluster = None
|
|
|
|
def __init__(self):
|
|
from py12306.cluster.cluster import Cluster
|
|
self.cluster = Cluster()
|
|
|
|
def job_destroy(self, data={}, callback=False): # 停止查询任务
|
|
from py12306.query.query import Query
|
|
if Config().is_cluster_enabled() and not callback:
|
|
return self.cluster.publish_event(self.KEY_JOB_DESTROY, data) # 通知其它节点退出
|
|
|
|
job = Query.job_by_name(data.get('name'))
|
|
if job:
|
|
job.destroy()
|
|
|
|
def user_loaded(self, data={}, callback=False): # 用户初始化完成
|
|
if Config().is_cluster_enabled() and not callback:
|
|
return self.cluster.publish_event(self.KEY_USER_LOADED, data) # 通知其它节点退出
|
|
from py12306.query.query import Query
|
|
|
|
if not Config().is_cluster_enabled() or Config().is_master():
|
|
query = Query.wait_for_ready()
|
|
for job in query.jobs:
|
|
if job.account_key == data.get('key'):
|
|
create_thread_and_run(job, 'check_passengers', Const.IS_TEST) # 检查乘客信息 防止提交订单时才检查
|
|
stay_second(1)
|
|
|
|
def user_job_destroy(self, data={}, callback=False):
|
|
from py12306.user.user import User
|
|
if Config().is_cluster_enabled() and not callback:
|
|
return self.cluster.publish_event(self.KEY_JOB_DESTROY, data) # 通知其它节点退出
|
|
|
|
user = User.get_user(data.get('key'))
|
|
if user:
|
|
user.destroy()
|