Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
P
py12306
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
python
py12306
Commits
2ee8dc5d
Commit
2ee8dc5d
authored
Jan 10, 2019
by
Jalin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
支持分布式集群
parent
c804de2e
Changes
5
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
54 additions
and
5 deletions
+54
-5
README.md
README.md
+29
-3
env.py.example
env.py.example
+13
-0
env.slave.py.example
env.slave.py.example
+12
-0
job.py
py12306/query/job.py
+0
-1
job.py
py12306/user/job.py
+0
-1
No files found.
README.md
View file @
2ee8dc5d
# 🚂 py12306 购票助手
支持
多账号,多任务购票
分布式,
多账号,多任务购票
## 前言
今年回家的票明显要难买很多,早早就答应了父母今年的票没问题,到现在一张票没买到,虽然家里已经订了汽车票,让我不用操心,但是想想他们一行还有小孩,心还是很伤的。
...
...
@@ -12,7 +12,7 @@
-
[
x
]
电话语音通知
-
[
x
]
多账号、多任务、多线程支持
-
[
x
]
单个任务多站点查询
-
[
]
分布式运行
-
[
x
]
分布式运行
-
[
]
Docker 支持
-
[
]
邮件通知
-
[
]
Web 管理页面
...
...
@@ -41,7 +41,7 @@ cp env.py.example env.py
**3. 启动前测试**
目前提供了一些简单的测试
目前提供了一些简单的测试
,包括用户账号检测,乘客信息检测,车站检测等
开始测试 -t
```
bash
...
...
@@ -59,6 +59,32 @@ python main.py -t -n
python main.py
```
### 参数列表
-
-t 测试配置信息
-
-t -n 测试配置信息以及通知消息
-
-c 指定自定义配置文件位置
### 分布式集群
集群依赖于 redis,目前支持情况
-
单台主节点多个子节点同时运行
-
主节点宕机后自动切换提升子节点为主节点
-
主节点恢复后自动恢复为真实主节点
-
配置通过主节点同步到所有子节点
-
主节点配置修改后无需重启子节点,支持自动更新
-
子节点消息实时同步到主节点
**使用**
将配置文件的中
`CLUSTER_ENABLED`
打开即开启分布式
目前提供了一个单独的子节点配置文件
`env.slave.py.example`
将文件修改为
`env.slave.py`
, 通过
`python main -c env.slave.py`
即可快速启动
## 更新
### 19-01-10
*
支持分布式集群
## 下单成功截图

...
...
env.py.example
View file @
2ee8dc5d
...
...
@@ -2,6 +2,7 @@
# 12306 账号
USER_ACCOUNTS = [
# 目前已支持仅查询,不下单,屏蔽掉下面的账号即可
{
'key': 0, # 如使用多个账号 key 不能重复
'user_name': 'your user name',
...
...
@@ -44,9 +45,19 @@ NOTIFICATION_VOICE_CODE_PHONE = 'your phone' # 接受通知的手机号
OUT_PUT_LOG_TO_FILE_ENABLED = 0
OUT_PUT_LOG_TO_FILE_PATH = 'runtime/12306.log' # 日志目录
# 分布式集群配置
CLUSTER_ENABLED = 0 # 集群状态
NODE_IS_MASTER = 1 # 是否是主节点 同时只能启用 1 个主节点
NODE_SLAVE_CAN_BE_MASTER = 1 # 主节点宕机后,子节点是否可以自动提升为主节点(建议打开)
NODE_NAME = 'master' # 节点名称,不能重复
REDIS_HOST = 'localhost' # Redis host
REDIS_PORT = '6379' # Redis post
REDIS_PASSWORD = '' # # Redis 密码 没有可以留空
# 查询任务
QUERY_JOBS = [
{
# 'job_name': 'bj -> sz', # 任务名称,不填默认会以车站名命名,不可重复
'account_key': 0, # 将会使用指定账号下单
'left_dates': [ # 出发日期 :Array
"2019-01-25",
...
...
@@ -82,6 +93,8 @@ QUERY_JOBS = [
},
# {
# 'job_name': 'cd -> gz', # 任务名称,不填默认会以车站名命名,不可重复
# 'account_key': 0, # 将会使用指定账号下单
# 'left_dates': [
# "2019-01-27",
# "2019-01-28"
...
...
env.slave.py.example
0 → 100644
View file @
2ee8dc5d
# encoding=utf8
# 分布式子节点配置文件示例
# 分布式集群配置
CLUSTER_ENABLED = 1 # 集群状态
NODE_IS_MASTER = 0 # 是否是主节点
NODE_NAME = 'slave 1' # 节点名称,不能重复
REDIS_HOST = 'localhost' # Redis host
REDIS_PORT = '6379' # Redis post
REDIS_PASSWORD = '' # # Redis 密码 没有可以留空
# 没了,其它配置会自动从主节点同步
py12306/query/job.py
View file @
2ee8dc5d
...
...
@@ -182,7 +182,6 @@ class Job:
if
Config
()
.
is_cluster_enabled
():
if
self
.
cluster
.
get_lock
(
lock_id
,
Cluster
.
lock_do_order_time
,
{
'node'
:
self
.
cluster
.
node_name
}):
# 获得下单锁
QueryLog
.
add_quick_log
(
'拿到锁'
+
lock_id
)
.
flush
()
order_result
=
self
.
do_order
(
user
)
if
not
order_result
:
# 下单失败,解锁
self
.
cluster
.
release_lock
(
lock_id
)
...
...
py12306/user/job.py
View file @
2ee8dc5d
...
...
@@ -83,7 +83,6 @@ class UserJob:
return
True
# 只有主节点才能走到这
if
self
.
is_first_time
()
or
not
self
.
check_user_is_login
():
a
=
1
self
.
is_ready
=
False
if
not
self
.
handle_login
():
return
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment