- Windows 在创建多进程时只能采用
spawn
方法,子进程创建后并不直接共享父进程已经设置好的的用户配置项,因此还需要将用户配置项userInfo
在进程中共享。但是userInfo
直接影响着最基本的config.py
,为了让用户自定义配置userInfo
能够在子进程中被正确应用,userInfo
的更新至子线程_internal.py
和config
单例的第一次初始化必须早于任何依赖于config
单例的方法的调用。 - 因此,这一版中对包调用的逻辑进行了大幅度的修改,删减了大部分包的在导入时即创建
_config
全局变量的逻辑,改成将config
变量在函数使用时才创建,并且将loop.py
和monitor.py
中的所有全局变量和全局函数声明为局部 - 个人觉得这个改动很丑陋,但是由于我的开发经验有限,一时想不到其他的写法,如果你对这个问题有更好的解决方法,欢迎发 Issue !
- 个人的一个改进想法是把多进程全部换成多线程,这样就不需要考虑资源共享的问题
- monitor 进程中
/loop
路由细分为/main_loop
和/login_loop
两个路由 - monitor 进程中
/all
路由添加了与错误捕获记录相关的键 - monitor 进程中添加了
/errors
路由
- 进程共享的 status 对象中的
loop
项细分为了main_loop
和login_loop
两个值,并添加了与错误捕获记录相关的键
- 修改了错误类
IAAANotSuccessError
的全局错误码
config.ini
内添加了 elective 多会话相关的配置config.ini
内删除了iaaa_relogin_interval
字段
- 为了应对选课网偶发的会话过期问题,为 elective 客户端引入了多会话机制,并删除了旧有的定时重登机制。具体见 README 中的 运行流程 小节
config.ini
内添加了client/supply_cancel_page
值,以支持不处于选课计划第一页的课程
- 新版对
config.ini
内的绝大多数配置项名称做了修改,需要用新提供config.sample.ini
重新填写一遍配置 - 添加了自定义
config.ini
和course.csv
- 添加了对
Flask
库的依赖,对于尚未安装该依赖的环境,还需额外运行pip3 install flask
如果你使用了 git
命令更新该项目,在输入 git pull origin master
后,可能会报错 error: Your local changes to the following files would be overwritten by merge:
,这是因为新版删除了 config.ini
和 course.*.csv
文件,而改用 config.sample.ini
和 course.*.sample.csv
代替。只需要输入以下命令即可消除冲突:
在项目根目录下:
$ git checkout config.ini
$ git checkout course.utf-8.csv
$ git checkout course.gbk.csv
- 在
BaseClient
内添加了persist_cookies
方法,会在hooks.py
内被调用,以确保在一些特定的错误下仍然可以保持会话 - 在
elective.py
的sso_login
的请求头中添加了一个固定的无效Cookie
以防止登录时报101
状态码 - 修改了
IAAA
的重新登录逻辑,由原来的遇到错误重登,变为每隔一段时间重登 - 在
loop.py
中对elective.py
的get_Validate
方法的调用结果添加了一层错误捕获,以应对非 JSON 格式的响应体