AzurLaneAutoScript icon indicating copy to clipboard operation
AzurLaneAutoScript copied to clipboard

ALAS 发现更新的时候会停止执行任务

Open yzbyzz opened this issue 2 years ago • 14 comments

在提问之前...

  • [X] 我已经搜索了现有的 issues
  • [X] 我在提问题之前至少花费了 5 分钟来思考和准备
  • [X] 我已经阅读了 Wiki 中的 常见问题(FAQ)
  • [X] 我正在使用最新版的 Alas

描述你的问题

当 ALAS 发现有更新的时候,会停止执行任务。 但是没有执行更新操作,也没有继续执行任务。

如何复现

  1. 正常运行 ALAS
  2. ALAS 发现有更新,尝试进行更新。此时会停止执行任务

预期行为

希望在发现更新后

  • ALAS 在停止任务后,可以自动完成更新,并重新开始任务。 或者
  • ALAS 只是提示有新版本,继续执行任务。后续需要手动进行更新。

相关 Logs

═══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════
                                                       TACTICAL                                                        
═══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════
2022-06-21 03:49:46.246 | INFO | <<< UI ENSURE >>>                                                                     
2022-06-21 03:49:46.253 | INFO | UI get current page                                                                   
2022-06-21 03:49:46.281 | INFO | [UI] page_main                                                                        
2022-06-21 03:49:46.299 | INFO | Goto page_reward                                                                      
2022-06-21 03:49:46.306 | INFO | <<< UI GOTO PAGE_REWARD >>>                                                           
2022-06-21 03:49:46.931 | INFO | Page switch: page_main -> page_reward                                                 
2022-06-21 03:49:46.944 | INFO | Click (  21,  170) @ MAIN_GOTO_REWARD                                                 
2022-06-21 03:49:52.063 | INFO | Page arrive: page_reward                                                              
═══════════════════════════════════════════════ TACTICAL CLASS RECEIVE ════════════════════════════════════════════════
2022-06-21 03:49:52.104 | INFO | TACTICAL CLASS RECEIVE                                                                
2022-06-21 03:49:52.136 | INFO | Click ( 432,  419) @ REWARD_2                                                         
2022-06-21 03:49:55.683 | INFO | Click ( 769,  517) @ POPUP_CONFIRM_TACTICAL                                           
──────────────────────────────────────────────── TACTICAL BOOKS CHOOSE ────────────────────────────────────────────────
2022-06-21 03:49:58.841 | INFO | TACTICAL BOOKS CHOOSE                                                                 
2022-06-21 03:49:58.859 | INFO | [Book_count] 11                                                                       
2022-06-21 03:49:58.863 | INFO | [Books] [Red_T4, Blue_T4_Exp, Red_T3, Blue_T3_Exp, Yellow_T3, Red_T2, Blue_T2_Exp,    
Yellow_T2, Red_T1, Blue_T1_Exp, Yellow_T1]                                                                             
2022-06-21 03:50:00.390 | INFO | [Book_count] 11                                                                       
2022-06-21 03:50:00.406 | INFO | [Books] [Red_T4, Blue_T4_Exp, Red_T3, Blue_T3_Exp, Yellow_T3, Red_T2, Blue_T2_Exp,    
Yellow_T2, Red_T1, Blue_T1_Exp, Yellow_T1]                                                                             
2022-06-21 03:50:00.485 | INFO | Loading OCR model: ./bin/cnocr_models/azur_lane                                       
2022-06-21 03:50:01.114 | INFO | [OCR_SKILL_EXP 0.689s] 1150/4400                                                      
2022-06-21 03:50:01.121 | INFO | [Book_sort] Blue_T4_Exp > Blue_T3_Exp > Blue_T2_Exp > Blue_T1_Exp > Yellow_T2 > Red_T2
> Yellow_T3 > Red_T3 > Yellow_T1 > Red_T4 > Red_T1 > first                                                             
2022-06-21 03:50:01.130 | INFO | Click ( 403,  307) @ BOOKS_GRID_1_0                                                   
2022-06-21 03:50:02.871 | INFO | Click (1094,  632) @ TACTICAL_CLASS_START                                             
2022-06-21 03:50:05.645 | INFO | Click ( 767,  505) @ POPUP_CONFIRM_TACTICAL                                           
2022-06-21 03:50:08.671 | INFO | <<< TACTICAL GET FINISH >>>                                                           
2022-06-21 03:50:08.697 | INFO | Tactical status: ['running', 'running', 'empty', 'empty']                             
2022-06-21 03:50:09.340 | INFO | [TACTICAL_REMAIN 0.631s] ['11:38:19', '12:00:00']                                     
2022-06-21 03:50:09.354 | INFO | Tactical finish: ['2022-06-21 15:28:28', '2022-06-21 15:50:09']                       
2022-06-21 03:50:09.372 | INFO | Click (  55,   44) @ BACK_ARROW                                                       
2022-06-21 03:50:10.811 | INFO | Click ( 795,  512) @ POPUP_CONFIRM_TACTICAL                                           
──────────────────────────────────────────────── TACTICAL BOOKS CHOOSE ────────────────────────────────────────────────
2022-06-21 03:50:13.663 | INFO | TACTICAL BOOKS CHOOSE                                                                 
2022-06-21 03:50:13.688 | INFO | [Book_count] 10                                                                       
2022-06-21 03:50:13.705 | INFO | [Books] [Red_T4, Red_T3, Blue_T3, Yellow_T3_Exp, Red_T2, Blue_T2, Yellow_T2_Exp,      
Red_T1, Blue_T1, Yellow_T1_Exp]                                                                                        
2022-06-21 03:50:15.125 | INFO | [Book_count] 10                                                                       
2022-06-21 03:50:15.133 | INFO | [Books] [Red_T4, Red_T3, Blue_T3, Yellow_T3_Exp, Red_T2, Blue_T2, Yellow_T2_Exp,      
Red_T1, Blue_T1, Yellow_T1_Exp]                                                                                        
2022-06-21 03:50:15.597 | INFO | [OCR_SKILL_EXP 0.437s] 1900/4400                                                      
2022-06-21 03:50:15.610 | INFO | [Book_sort] Yellow_T3_Exp > Yellow_T2_Exp > Yellow_T1_Exp > Blue_T2 > Red_T2 > Blue_T3
> Red_T3 > Blue_T1 > Red_T4 > Red_T1 > first                                                                           
2022-06-21 03:50:15.625 | INFO | Click ( 711,  348) @ BOOKS_GRID_3_0                                                   
2022-06-21 03:50:17.507 | INFO | Click (1114,  628) @ TACTICAL_CLASS_START                                             
2022-06-21 03:50:20.428 | INFO | Click ( 750,  509) @ POPUP_CONFIRM_TACTICAL                                           
2022-06-21 03:50:23.163 | INFO | <<< TACTICAL GET FINISH >>>                                                           
2022-06-21 03:50:23.176 | INFO | Tactical status: ['running', 'running', 'running', 'empty']                           
2022-06-21 03:50:23.746 | INFO | [TACTICAL_REMAIN 0.557s] ['11:38:04', '11:59:45', '08:00:00']                         
2022-06-21 03:50:23.759 | INFO | Tactical finish: ['2022-06-21 15:28:27', '2022-06-21 15:50:08', '2022-06-21 11:50:23']
2022-06-21 03:50:23.769 | INFO | Click (  59,   57) @ BACK_ARROW                                                       
2022-06-21 03:50:27.444 | INFO | Delay task `Tactical` to 2022-06-21 11:50:23 (target=datetime.datetime(2022, 6, 21,   
11, 50, 23))                                                                                                           
2022-06-21 03:50:27.491 | INFO | Bind task {'General', 'Alas', 'Tactical'}                                             
2022-06-21 03:50:27.507 | INFO | Save config ./config\alas_冲绳岛.json,                                                
Tactical.Scheduler.NextRun=datetime.datetime(2022, 6, 21, 11, 50, 23)                                                  
2022-06-21 03:50:27.636 | INFO | Scheduler: End task `Tactical`                                                        
2022-06-21 03:50:27.647 | INFO | [Server] cn                                                                           
2022-06-21 03:50:27.714 | INFO | Bind task {'General', 'Alas'}                                                         
2022-06-21 03:50:27.727 | INFO | No task pending                                                                       
2022-06-21 03:50:27.738 | INFO | [Task] Commission (Enable, 2022-06-21 03:56:23)                                       
2022-06-21 03:50:27.756 | INFO | Bind task {'General', 'Alas', 'Commission'}                                           
2022-06-21 03:50:27.788 | INFO | Wait until 2022-06-21 03:56:23 for task `Commission`                                  
2022-06-21 03:50:27.811 | INFO | Goto main page during wait                                                            
2022-06-21 03:50:30.006 | INFO | [Package_name] com.bilibili.azurlane                                                  
2022-06-21 03:50:30.012 | INFO | App is already running, goto main page                                                
2022-06-21 03:50:30.022 | INFO | <<< UI ENSURE >>>                                                                     
2022-06-21 03:50:30.037 | INFO | UI get current page                                                                   
2022-06-21 03:50:30.094 | INFO | [UI] page_reward                                                                      
2022-06-21 03:50:30.105 | INFO | Goto page_main                                                                        
2022-06-21 03:50:30.118 | INFO | <<< UI GOTO PAGE_MAIN >>>                                                             
2022-06-21 03:50:30.179 | INFO | Page switch: page_reward -> page_main                                                 
2022-06-21 03:50:30.186 | INFO | Click (1072,  631) @ REWARD_GOTO_MAIN                                                 
2022-06-21 03:50:34.295 | INFO | Page arrive: page_main                                                                
2022-06-21 03:51:09.330 | INFO | Update event detected                                                                 
2022-06-21 03:51:09.347 | INFO | [alas_冲绳岛] exited. Reason: Update

截图

No response

还有别的吗?

一些猜测: (日志里没有看到相关的信息加以验证,仅做参考)

  • GitHub 访问速度不佳,ALAS 更新时间过长,导致更新失败。(但是没有看到相关日志)
  • ALAS 停止任务要更新时,停止任务失败。(从日志来看,ALAS 是凌晨 3:51 停止的。早上看到 ALAS 的时候,UI 里 运行中还有“科研”这个任务,游戏里已经回到了主界面。一个猜测是这里是否在“停止任务、执行更新”的过程中卡在了某个地方。)
  • 早上看到 ALAS 已经停止,手动点击更新的时候,看到提示“等待任务完成”。这时手动“停止”调度器,ALAS 更新完成。然后手动“开始”调度器,可以正常运行。(这里看来访问 GitHub 还是没有问题的,不排除半夜网络抽风的情况。)

yzbyzz avatar Jun 21 '22 01:06 yzbyzz

还需要当天的gui.txt

LmeSzinc avatar Jun 21 '22 03:06 LmeSzinc

还需要当天的gui.txt

FYI

═══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════
                                                         START                                                         
═══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════
2022-06-21 00:00:07.857 | INFO | No update                                                                             
2022-06-21 00:04:15.140 | INFO | End of log queue handler loop                                                         
2022-06-21 00:04:15.153 | INFO | [alas_冲绳岛] exited                                                                  
2022-06-21 00:05:09.356 | INFO | No update                                                                             
2022-06-21 00:08:25.282 | INFO | Task <Switch_scheduler_btn_refresh (delay=1)> removed.                                
2022-06-21 00:08:25.289 | INFO | Task <Switch_log_scroll_btn_refresh (delay=1)> removed.                               
2022-06-21 00:08:25.303 | INFO | Task <alas_update_overiew_task (delay=10)> removed.                                   
2022-06-21 00:08:25.319 | INFO | Task <put_log (delay=0.25)> removed.                                                  
2022-06-21 00:08:43.312 | INFO | Add task <Switch_scheduler_btn_refresh (delay=1)>                                     
2022-06-21 00:08:43.345 | INFO | Add task <Switch_log_scroll_btn_refresh (delay=1)>                                    
2022-06-21 00:08:43.363 | INFO | Add task <alas_update_overiew_task (delay=10)>                                        
2022-06-21 00:08:43.374 | INFO | Add task <put_log (delay=0.25)>                                                       
2022-06-21 00:10:11.946 | INFO | No update                                                                             
2022-06-21 00:15:14.680 | INFO | No update                                                                             
2022-06-21 00:20:16.842 | INFO | No update                                                                             
2022-06-21 00:25:18.233 | INFO | No update                                                                             
2022-06-21 00:30:19.528 | INFO | No update                                                                             
2022-06-21 00:35:20.831 | INFO | No update                                                                             
2022-06-21 00:40:22.105 | INFO | No update                                                                             
2022-06-21 00:45:23.299 | INFO | No update                                                                             
2022-06-21 00:50:24.453 | INFO | No update                                                                             
2022-06-21 00:55:25.691 | INFO | No update                                                                             
2022-06-21 01:00:26.882 | INFO | No update                                                                             
2022-06-21 01:05:28.144 | INFO | No update                                                                             
2022-06-21 01:10:29.972 | INFO | No update                                                                             
2022-06-21 01:15:31.214 | INFO | No update                                                                             
2022-06-21 01:20:32.494 | INFO | No update                                                                             
2022-06-21 01:25:33.719 | INFO | No update                                                                             
2022-06-21 01:30:34.984 | INFO | No update                                                                             
2022-06-21 01:35:36.231 | INFO | No update                                                                             
2022-06-21 01:40:37.922 | INFO | No update                                                                             
2022-06-21 01:45:39.184 | INFO | No update                                                                             
2022-06-21 01:50:40.554 | INFO | No update                                                                             
2022-06-21 01:55:41.779 | INFO | No update                                                                             
2022-06-21 02:00:43.183 | INFO | No update                                                                             
2022-06-21 02:05:44.442 | INFO | No update                                                                             
2022-06-21 02:10:45.778 | INFO | No update                                                                             
2022-06-21 02:15:46.998 | INFO | No update                                                                             
2022-06-21 02:20:48.251 | INFO | No update                                                                             
2022-06-21 02:25:49.566 | INFO | No update                                                                             
2022-06-21 02:30:50.777 | INFO | No update                                                                             
2022-06-21 02:35:52.021 | INFO | No update                                                                             
2022-06-21 02:41:05.585 | INFO | New update avaliable                                                                  
2022-06-21 02:41:05.589 | INFO | b1ab1ce0 - Merge pull request #1239 from LmeSzinc/dev                                 
2022-06-21 03:51:07.639 | INFO | Waiting all running alas finish.                                                      
2022-06-21 07:49:44.112 | INFO | Task <Switch_scheduler_btn_refresh (delay=1)> removed.                                
2022-06-21 07:49:44.180 | INFO | Task <Switch_log_scroll_btn_refresh (delay=1)> removed.                               
2022-06-21 07:49:44.205 | INFO | Task <alas_update_overiew_task (delay=10)> removed.                                   
2022-06-21 07:49:44.209 | INFO | Task <put_log (delay=0.25)> removed.                                                  
2022-06-21 07:49:45.173 | INFO | Add task <Switch_updater_refresh (delay=0.5)>                                         
2022-06-21 07:50:21.791 | INFO | Task <Switch_updater_refresh (delay=0.5)> removed.                                    
2022-06-21 07:50:21.799 | INFO | [Server] cn                                                                           
2022-06-21 07:50:22.016 | INFO | Bind task {'', 'Alas', 'General'}                                                     
2022-06-21 07:50:22.675 | INFO | Add task <Switch_scheduler_btn_refresh (delay=1)>                                     
2022-06-21 07:50:22.684 | INFO | Add task <Switch_log_scroll_btn_refresh (delay=1)>                                    
2022-06-21 07:50:22.690 | INFO | Add task <alas_update_overiew_task (delay=10)>                                        
2022-06-21 07:50:22.743 | INFO | Add task <put_log (delay=0.25)>                                                       
2022-06-21 07:50:24.316 | INFO | Alas [alas_冲绳岛] stopped                                                            
2022-06-21 07:50:24.349 | INFO | Remains: []                                                                           
2022-06-21 07:50:24.694 | INFO | All alas stopped, start updating                                                      
2022-06-21 07:50:24.747 | INFO | <<< RUN UPDATE >>>                                                                    
2022-06-21 07:50:24.800 | INFO | +---------------------------------------------------+                                 
2022-06-21 07:50:24.850 | INFO | |                    Update Alas                    |                                 
2022-06-21 07:50:24.874 | INFO | End of log queue handler loop                                                         
2022-06-21 07:50:24.939 | WARNING | Log queue handler thread does not stop within 1 seconds                            
2022-06-21 07:50:24.949 | INFO | +---------------------------------------------------+                                 
2022-06-21 07:50:25.093 | INFO | [alas_冲绳岛] exited                                                                  
2022-06-21 07:50:25.115 | INFO | ==================== Git Init ====================                                    
2022-06-21 07:50:25.189 | INFO | "D:/App/AlasApp_0.3.5/AzurLaneAutoScript/toolkit/Git/mingw64/bin/git.exe" init        
2022-06-21 07:50:25.547 | INFO | [ success ]                                                                           
2022-06-21 07:50:25.598 | INFO | ==================== Set Git Proxy ====================                               
2022-06-21 07:50:25.674 | INFO | "D:/App/AlasApp_0.3.5/AzurLaneAutoScript/toolkit/Git/mingw64/bin/git.exe" config      
--local --unset http.proxy                                                                                             
2022-06-21 07:50:25.971 | INFO | [ allowed failure ], error_code: 5                                                    
2022-06-21 07:50:26.034 | INFO | "D:/App/AlasApp_0.3.5/AzurLaneAutoScript/toolkit/Git/mingw64/bin/git.exe" config      
--local --unset https.proxy                                                                                            
2022-06-21 07:50:26.281 | INFO | [ allowed failure ], error_code: 5                                                    
2022-06-21 07:50:26.377 | INFO | ==================== Set Git Repository ====================                          
2022-06-21 07:50:26.423 | INFO | "D:/App/AlasApp_0.3.5/AzurLaneAutoScript/toolkit/Git/mingw64/bin/git.exe" remote      
set-url origin https://gitee.com/LmeSzinc/AzurLaneAutoScript                                                           
2022-06-21 07:50:26.695 | INFO | [ success ]                                                                           
2022-06-21 07:50:26.717 | INFO | ==================== Fetch Repository Branch ====================                     
2022-06-21 07:50:26.784 | INFO | "D:/App/AlasApp_0.3.5/AzurLaneAutoScript/toolkit/Git/mingw64/bin/git.exe" fetch origin
master                                                                                                                 
2022-06-21 07:50:27.905 | INFO | [alas_冲绳岛] exited                                                                  
2022-06-21 07:50:28.323 | INFO | [ success ]                                                                           
2022-06-21 07:50:28.409 | INFO | ==================== Pull Repository Branch ====================                      
2022-06-21 07:50:28.447 | INFO | "D:/App/AlasApp_0.3.5/AzurLaneAutoScript/toolkit/Git/mingw64/bin/git.exe" reset --hard
origin/master                                                                                                          
2022-06-21 07:50:33.039 | INFO | [ success ]                                                                           
2022-06-21 07:50:33.054 | INFO | "D:/App/AlasApp_0.3.5/AzurLaneAutoScript/toolkit/Git/mingw64/bin/git.exe" pull        
--ff-only origin master                                                                                                
2022-06-21 07:50:33.817 | INFO | Task <Switch_scheduler_btn_refresh (delay=1)> removed.                                
2022-06-21 07:50:33.844 | INFO | Task <Switch_log_scroll_btn_refresh (delay=1)> removed.                               
2022-06-21 07:50:33.852 | INFO | Task <alas_update_overiew_task (delay=10)> removed.                                   
2022-06-21 07:50:33.859 | INFO | Task <put_log (delay=0.25)> removed.                                                  
2022-06-21 07:50:34.444 | INFO | [ success ]                                                                           
2022-06-21 07:50:34.463 | INFO | ==================== Show Version ====================                                
2022-06-21 07:50:34.467 | INFO | "D:/App/AlasApp_0.3.5/AzurLaneAutoScript/toolkit/Git/mingw64/bin/git.exe" log         
--no-merges -1                                                                                                         
2022-06-21 07:50:34.647 | INFO | [ success ]                                                                           
2022-06-21 07:50:34.653 | INFO | +-----------------------------------------------------------+                         
2022-06-21 07:50:34.659 | INFO | |                    Update Dependencies                    |                         
2022-06-21 07:50:34.673 | INFO | +-----------------------------------------------------------+                         
2022-06-21 07:50:34.687 | INFO | ==================== Check Python ====================                                
2022-06-21 07:50:34.699 | INFO | "D:/App/AlasApp_0.3.5/AzurLaneAutoScript/toolkit/python.exe" --version                
2022-06-21 07:50:36.266 | INFO | [ success ]                                                                           
2022-06-21 07:50:36.272 | INFO | ==================== Update Dependencies ====================                         
2022-06-21 07:50:36.282 | INFO | "D:/App/AlasApp_0.3.5/AzurLaneAutoScript/toolkit/python.exe" -m pip install -r        
requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple --disable-pip-version-check                               
2022-06-21 07:50:36.290 | INFO | Add task <Switch_updater_refresh (delay=0.5)>                                         
2022-06-21 07:50:45.918 | INFO | [ success ]                                                                           
2022-06-21 07:50:45.961 | INFO | Start clearup                                                                         
2022-06-21 07:50:45.968 | INFO | [alas_硫磺岛] exited                                                                  
2022-06-21 07:50:45.979 | INFO | [alas_冲绳岛] exited      

yzbyzz avatar Jun 21 '22 11:06 yzbyzz

补充一些信息,出现问题的环境

  • Windows7
  • MUMU 模拟器

做了如下操作,可以稳定复现更新失败的情况。

  • 修改代码,主要如下

# #1 app.py startup
task_handler.add(updater.schedule_update(), 86400)
# 修改为
task_handler.add(updater.schedule_update(), 5) 

# #2 updater.py schedule_update
th._task.delay = get_next_time(self.schedule_time)
# 修改为
th._task.delay = 5

# #3 updater.py _wait_update
time.sleep(0.25)
# 修改为
logger.info(f"Remains instances: {_instances}")
time.sleep(5)

# #4 updater.py __init__
# 增加
self.cnt = 0

# #5 updater.py _check_update
# 整个方法改为
        self.cnt += 1
        if self.cnt < 6:
            logger.info(f"No update")
            return False
        else:
            logger.info(f"New update avaliable")
            return True

- #1 #2 是为了缩短自动更新的检查间隔
- #3 是为了确认卡住更新的进程
- #4 #5 是为了模拟发现更新

  • 双击 alas.exe 运行,会撤销本地代码改动。所以使用 console.bat + python gui.py 的方式启动 ALAS。
  • 浏览器打开 http://127.0.0.1:22267 ,启动一个调度器。
  • 等待 30 秒后,走到更新的流程。
  • 同样会卡住。日志如下
═══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════
                                                         START                                                         
═══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════
2022-06-24 23:54:53.914 | INFO | New update avaliable                                                                  
2022-06-24 23:54:53.935 | INFO | Waiting all running alas finish.                                                      
2022-06-24 23:54:53.955 | INFO | Remains instances: [<module.webui.process_manager.ProcessManager object at            
0x000000000C41C388>]                                                                                                   
2022-06-24 23:54:58.973 | INFO | Remains instances: [<module.webui.process_manager.ProcessManager object at            
0x000000000C41C388>]                                                                                                   
2022-06-24 23:55:03.999 | INFO | Remains instances: [<module.webui.process_manager.ProcessManager object at            
0x000000000C41C388>]                                                                                                   
2022-06-24 23:55:09.027 | INFO | Remains instances: [<module.webui.process_manager.ProcessManager object at            
0x000000000C41C388>]                                                                                                   
2022-06-24 23:55:14.055 | INFO | Remains instances: [<module.webui.process_manager.ProcessManager object at            
0x000000000C41C388>]                  
  • 在浏览器关闭调度器后,此时可以走更新流程。日志如下
2022-06-24 23:55:14.277 | INFO | End of log queue handler loop                                                         
2022-06-24 23:55:14.290 | INFO | [alas_硫磺岛] exited                                                                  
2022-06-24 23:55:19.075 | INFO | Alas [alas_硫磺岛] stopped                                                            
2022-06-24 23:55:19.095 | INFO | Remains: []                                                                           
2022-06-24 23:55:19.107 | INFO | Remains instances: []                                                                 
2022-06-24 23:55:24.118 | INFO | All alas stopped, start updating                                                      
2022-06-24 23:55:24.132 | INFO | <<< RUN UPDATE >>>    

其他信息

本问题在 Windows7 上稳定出现,在 Mac 上没有复现。Windows10 待验证。 如果只是 Windows7 的问题,这里建议增加选项控制是否自动更新。 现阶段,我会注释 app.py 里的 task_handler.add(updater.schedule_update(), 86400) 来关闭自动更新。

yzbyzz avatar Jun 24 '22 16:06 yzbyzz

https://github.com/LmeSzinc/AzurLaneAutoScript/blob/7bfff9019ea1740e93cb20ba34b7958230508b2b/config/deploy.template.yaml#L92-L97

改成 null 可以禁用自动更新

python -m module.webui.updater 可以直接运行更新部分的代码。 我无法复现这个问题,需要你帮忙对这里debug。 https://github.com/LmeSzinc/AzurLaneAutoScript/blob/7bfff9019ea1740e93cb20ba34b7958230508b2b/module/webui/updater.py#L209-L219

为了打印log这里monkey patch了内置的print函数,不知道是不是这个出了问题

18870 avatar Jun 24 '22 16:06 18870

2022-06-24 23:55:14.055 | INFO | Remains instances: [<module.webui.process_manager.ProcessManager object at            
0x000000000C41C388>]  

从日志来看,我猜测出问题的地方是在 updater.py 发现有更新,等待所有进程退出的过程中出错。(应该还没到执行更新的步骤。) 这里具体的问题在,ALAS 没有继续执行任务了,但是对应的进程还在运行。 从表现来看就是 ALAS 已经不会执行任务了,但是 Web 页面上 调度器按钮还是处于 “运行”状态,需要手动点击“停止”。 此时 ProcessManager 返回的 running_instances 才会为空,也才会执行后面的更新步骤。

我怀疑 Windows7 下发现更新时,不能正确停止对应的 ProcessManager,所以无法更新。 这里我再做进一步的验证。

yzbyzz avatar Jun 25 '22 01:06 yzbyzz

~原来不是一个问题~

https://github.com/LmeSzinc/AzurLaneAutoScript/blob/3aafd4a5f22c37afa9146eb37b25590c50bd2105/alas.py#L339-L343

我发现 exit 只会退出当前线程,尝试在 exit 调用前打印现在存活的进程。

import threading
logger.info(threading.enumerate())
INFO     11:48:00.855 │ Update event detected                                  
INFO     11:48:00.858 │ [alas] exited. Reason: Update                          
INFO     11:48:00.860 │ [<_MainThread(MainThread, started 1181404)>]           

结果应该只有一个主线程

18870 avatar Jun 25 '22 03:06 18870

一些验证

在 module/webui/process_manager.py 中增加方法
    @classmethod
    def show_process(cls):
        """
        Show process brief
        """
        for process in cls._processes.values():
            logger.info(f"[{process}] -> [{process.alive}]")

修改 module/webui/updater.py
    def _wait_update(self, instances, names):
        if self.state == "cancel":
            self.state = 1
        self.state = "wait"
        self.event.set()
        _instances = instances.copy()
        while _instances:
            for alas in _instances:
                if not alas.alive:
                    _instances.remove(alas)
                    logger.info(f"Alas [{alas.config_name}] stopped")
                    logger.info(f"Remains: {[alas.config_name for alas in _instances]}")
            if self.state == "cancel":
                self.state = 1
                self.event.clear()
                ProcessManager.restart_processes(instances, self.event)
                return
            # >>>>>>>>>>>>>>>>>>>>>
            logger.info(f"running instances: {_instances}")
            ProcessManager.show_process()
            time.sleep(5)
            # <<<<<<<<<<<<<<<<<<<<<
        self._run_update(instances, names)


在 Windows7 下

可以看到发现更新后,日志如下

2022-06-25 10:19:11.153 | INFO | [<module.webui.process_manager.ProcessManager object at 0x1146a17d0>] -> [True]      

在浏览器中手动点击“停止”按钮后,日志如下

2022-06-25 10:20:11.153 | INFO | [<module.webui.process_manager.ProcessManager object at 0x1146a17d0>] -> [False]      

此时才会开始执行更新的步骤。

在 Mac 下

发现更新后,日志如下,(不需要手动点击“停止”按钮,就会执行更新)

2022-06-25 10:29:11.153 | INFO | [<module.webui.process_manager.ProcessManager object at 0x1146a17d0>] -> [False]      

目前的结论

Windows7 下 is_alive 判断不准确? https://github.com/LmeSzinc/AzurLaneAutoScript/blob/7bfff9019ea1740e93cb20ba34b7958230508b2b/module/webui/process_manager.py?_pjax=%23js-repo-pjax-container#L79-L84

从下面几篇链接来看,process kill 后的一段时间内 is_alive 仍然可能为 true。

  • https://stackoverflow.com/questions/60721574/python-multiprocessing-after-kill-process-give-is-alive-status-true
  • https://stackoverflow.com/questions/19353677/multiprocessing-process-is-alive-returns-true-although-process-has-finished-w

但是目前的检查进程结束,是一个循环判断,这样看来 is_alive 应该是一直返回 true。 所以问题是否在于目前进程退出的方式 exit 在 Windows7 下不生效? https://github.com/LmeSzinc/AzurLaneAutoScript/blob/7bfff9019ea1740e93cb20ba34b7958230508b2b/alas.py#L339-L341

yzbyzz avatar Jun 25 '22 03:06 yzbyzz

...

INFO     11:48:00.855 │ Update event detected                                  
INFO     11:48:00.858 │ [alas] exited. Reason: Update                          
INFO     11:48:00.860 │ [<_MainThread(MainThread, started 1181404)>]           

结果应该只有一个主线程

Windows7 下打印线程,结果相同,只有一个线程

2022-06-25 12:45:45.609 | INFO | Update event detected                                                                 
2022-06-25 12:45:45.634 | INFO | [alas_硫磺岛] exited. Reason: Update                                                  
2022-06-25 12:45:45.647 | INFO | [<_MainThread(MainThread, started 2388)>]  

yzbyzz avatar Jun 25 '22 04:06 yzbyzz

重新跑了一次,日志比较清晰一点。

完整日志

alas.txt
═══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════
                                                         START                                                         
═══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════
2022-06-25 12:51:17.828 | INFO | Start scheduler loop: alas_硫磺岛                                                     
2022-06-25 12:51:17.847 | INFO | [Server] cn                                                                           
2022-06-25 12:51:17.902 | INFO | Bind task {'Alas', 'General'}                                                         
2022-06-25 12:51:17.932 | INFO | No task pending                                                                       
2022-06-25 12:51:17.942 | INFO | [Task] Commission (Enable, 2022-06-25 13:38:09)                                       
2022-06-25 12:51:17.970 | INFO | Bind task {'Commission', 'Alas', 'General'}                                           
2022-06-25 12:51:23.156 | INFO | Wait until 2022-06-25 13:38:09 for task `Commission`                                  
2022-06-25 12:51:23.174 | INFO | Goto main page during wait                                                            
═══════════════════════════════════════════════════════ DEVICE ════════════════════════════════════════════════════════
2022-06-25 12:51:24.019 | INFO | DEVICE                                                                                
2022-06-25 12:51:24.047 | INFO | [AdbBinary]                                                                           
D:\App\AlasApp_0.3.5\AzurLaneAutoScript__ForTest\toolkit\Lib\site-packages\adbutils\binaries\adb.exe                   
2022-06-25 12:51:24.078 | INFO | [AdbClient] AdbClient(127.0.0.1, 5037)                                                
2022-06-25 12:51:24.109 | INFO | <<< DETECT DEVICE >>>                                                                 
2022-06-25 12:51:24.134 | INFO | Here are the available devices, copy to Alas.Emulator.Serial to use it or set         
Alas.Emulator.Serial="auto"                                                                                            
2022-06-25 12:51:24.166 | INFO | 127.0.0.1:7555                                                                        
2022-06-25 12:51:24.223 | INFO | already connected to 127.0.0.1:7555                                                   
2022-06-25 12:51:24.237 | INFO | [AdbDevice] AdbDevice(serial=127.0.0.1:7555)                                          
2022-06-25 12:51:24.276 | INFO | [PackageName] com.bilibili.azurlane                                                   
2022-06-25 12:51:24.296 | INFO | [Server] cn                                                                           
2022-06-25 12:51:24.321 | INFO | Screenshot interval set to 0.3s                                                       
2022-06-25 12:51:26.671 | INFO | [Screen_size] 1280x720                                                                
2022-06-25 12:51:29.117 | INFO | [Package_name] com.bilibili.azurlane                                                  
2022-06-25 12:51:29.127 | INFO | App is already running, goto main page                                                
2022-06-25 12:51:29.142 | INFO | <<< UI ENSURE >>>                                                                     
2022-06-25 12:51:29.165 | INFO | UI get current page                                                                   
2022-06-25 12:51:29.245 | INFO | [UI] page_main                                                                        
2022-06-25 12:51:29.266 | INFO | Already at page_main                                                                  
2022-06-25 12:51:44.292 | INFO | Update event detected                                                                 
2022-06-25 12:51:44.324 | INFO | [alas_硫磺岛] exited. Reason: Update                                                  
2022-06-25 12:51:44.344 | INFO | [<_MainThread(MainThread, started 6992)>]                                             
═══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════
                                                         START                                                         
═══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════
2022-06-25 12:52:57.050 | INFO | Start scheduler loop: alas_硫磺岛                                                     
2022-06-25 12:52:57.081 | INFO | [Server] cn                                                                           
2022-06-25 12:52:57.172 | INFO | Bind task {'Alas', 'General'}                                                         
2022-06-25 12:52:57.191 | INFO | No task pending                                                                       
2022-06-25 12:52:57.210 | INFO | [Task] Commission (Enable, 2022-06-25 13:38:09)                                       
2022-06-25 12:52:57.249 | INFO | Bind task {'Commission', 'Alas', 'General'}                                           
2022-06-25 12:53:02.433 | INFO | Wait until 2022-06-25 13:38:09 for task `Commission`                                  
2022-06-25 12:53:02.455 | INFO | Goto main page during wait                                                            
═══════════════════════════════════════════════════════ DEVICE ════════════════════════════════════════════════════════
2022-06-25 12:53:03.276 | INFO | DEVICE                                                                                
2022-06-25 12:53:03.285 | INFO | [AdbBinary]                                                                           
D:\App\AlasApp_0.3.5\AzurLaneAutoScript__ForTest\toolkit\Lib\site-packages\adbutils\binaries\adb.exe                   
2022-06-25 12:53:03.320 | INFO | [AdbClient] AdbClient(127.0.0.1, 5037)                                                
2022-06-25 12:53:03.343 | INFO | <<< DETECT DEVICE >>>                                                                 
2022-06-25 12:53:03.371 | INFO | Here are the available devices, copy to Alas.Emulator.Serial to use it or set         
Alas.Emulator.Serial="auto"                                                                                            
2022-06-25 12:53:03.402 | INFO | 127.0.0.1:7555                                                                        
2022-06-25 12:53:03.425 | INFO | already connected to 127.0.0.1:7555                                                   
2022-06-25 12:53:03.445 | INFO | [AdbDevice] AdbDevice(serial=127.0.0.1:7555)                                          
2022-06-25 12:53:03.468 | INFO | [PackageName] com.bilibili.azurlane                                                   
2022-06-25 12:53:03.498 | INFO | [Server] cn                                                                           
2022-06-25 12:53:03.515 | INFO | Screenshot interval set to 0.3s                                                       
2022-06-25 12:53:05.698 | INFO | [Screen_size] 1280x720                                                                
2022-06-25 12:53:08.073 | INFO | [Package_name] com.bilibili.azurlane                                                  
2022-06-25 12:53:08.089 | INFO | App is already running, goto main page                                                
2022-06-25 12:53:08.106 | INFO | <<< UI ENSURE >>>                                                                     
2022-06-25 12:53:08.127 | INFO | UI get current page                                                                   
2022-06-25 12:53:08.198 | INFO | [UI] page_main                                                                        
2022-06-25 12:53:08.212 | INFO | Already at page_main     
gui.txt
═══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════
                                                         START                                                         
═══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════
═══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════
                                                         START                                                         
═══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════
2022-06-25 12:51:03.648 | INFO | <<< WEBUI CONFIGS >>>                                                                 
2022-06-25 12:51:03.688 | INFO | [Theme] default                                                                       
2022-06-25 12:51:03.707 | INFO | [Language] zh-CN                                                                      
2022-06-25 12:51:03.715 | INFO | [Password] False                                                                      
2022-06-25 12:51:03.726 | INFO | [CDN] False                                                                           
2022-06-25 12:51:03.754 | INFO | [Electron] False                                                                      
2022-06-25 12:51:03.773 | INFO | <<< APP.PY STARTUP >>>                                                                
2022-06-25 12:51:03.804 | INFO | app.py startup                                                                        
═══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════
                                                         START                                                         
═══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════
2022-06-25 12:51:05.143 | INFO | Add task <schedule_update (delay=5)>                                                  
2022-06-25 12:51:05.172 | INFO | Start task handler                                                                    
2022-06-25 12:51:05.189 | INFO | <<< RESTART ALAS >>>                                                                  
2022-06-25 12:51:05.236 | INFO | Start alas complete                                                                   
2022-06-25 12:51:10.183 | INFO | >>>> _chec_update, cnt:1                                                              
2022-06-25 12:51:10.209 | INFO | No update                                                                             
2022-06-25 12:51:12.402 | INFO | [Server] cn                                                                           
2022-06-25 12:51:12.424 | INFO | Using template config, which is read only                                             
2022-06-25 12:51:12.577 | INFO | Add task <Switch_state_refresh (delay=2)>                                             
2022-06-25 12:51:12.626 | INFO | Add task <Switch_visibility_state_refresh (delay=15)>                                 
2022-06-25 12:51:12.645 | INFO | Add task <Switch_update_state_refresh (delay=1)>                                      
2022-06-25 12:51:12.676 | INFO | Start task handler                                                                    
2022-06-25 12:51:12.708 | INFO | [Server] cn                                                                           
2022-06-25 12:51:12.773 | INFO | Bind task {'', 'General', 'Alas'}                                                     
2022-06-25 12:51:13.474 | INFO | Add task <Switch_scheduler_btn_refresh (delay=1)>                                     
2022-06-25 12:51:13.501 | INFO | Add task <Switch_log_scroll_btn_refresh (delay=1)>                                    
2022-06-25 12:51:13.527 | INFO | Add task <alas_update_overiew_task (delay=10)>                                        
2022-06-25 12:51:13.554 | INFO | Add task <put_log (delay=0.25)>                                                       
2022-06-25 12:51:15.245 | INFO | >>>> _chec_update, cnt:2                                                              
2022-06-25 12:51:15.262 | INFO | No update                                                                             
═══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════
                                                         START                                                         
═══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════
2022-06-25 12:51:20.278 | INFO | >>>> _chec_update, cnt:3                                                              
2022-06-25 12:51:20.291 | INFO | No update                                                                             
2022-06-25 12:51:25.346 | INFO | >>>> _chec_update, cnt:4                                                              
2022-06-25 12:51:25.369 | INFO | No update                                                                             
2022-06-25 12:51:30.376 | INFO | >>>> _chec_update, cnt:5                                                              
2022-06-25 12:51:30.400 | INFO | No update                                                                             
2022-06-25 12:51:35.427 | INFO | >>>> _chec_update, cnt:6                                                              
2022-06-25 12:51:35.445 | INFO | No update                                                                             
2022-06-25 12:51:40.473 | INFO | >>>> _chec_update, cnt:7                                                              
2022-06-25 12:51:40.498 | INFO | New update avaliable                                                                  
2022-06-25 12:51:40.512 | INFO | Waiting all running alas finish.                                                      
2022-06-25 12:51:40.524 | INFO | <<< SHOW_PROCESSES, TAG[_WAIT_UPDATE 1] >>>                                           
2022-06-25 12:51:40.543 | INFO | process[<module.webui.process_manager.ProcessManager object at 0x000000000C206D88>]   
[alas_硫磺岛] -> [True]                                                                                                
2022-06-25 12:51:40.577 | INFO | <<< SHOW_PROCESSES, TAG[_WAIT_UPDATE 1] >>>                                           
2022-06-25 12:51:40.603 | INFO | <<< SHOW_PROCESSES, TAG[_WAIT_UPDATE 2] >>>                                           
2022-06-25 12:51:40.617 | INFO | process[<module.webui.process_manager.ProcessManager object at 0x000000000C206D88>]   
[alas_硫磺岛] -> [True]                                                                                                
2022-06-25 12:51:40.648 | INFO | <<< SHOW_PROCESSES, TAG[_WAIT_UPDATE 2] >>>                                           
2022-06-25 12:51:45.663 | INFO | <<< SHOW_PROCESSES, TAG[_WAIT_UPDATE 2] >>>                                           
2022-06-25 12:51:45.690 | INFO | process[<module.webui.process_manager.ProcessManager object at 0x000000000C206D88>]   
[alas_硫磺岛] -> [True]                                                                                                
2022-06-25 12:51:45.710 | INFO | <<< SHOW_PROCESSES, TAG[_WAIT_UPDATE 2] >>>                                           
2022-06-25 12:51:50.737 | INFO | <<< SHOW_PROCESSES, TAG[_WAIT_UPDATE 2] >>>                                           
2022-06-25 12:51:50.762 | INFO | process[<module.webui.process_manager.ProcessManager object at 0x000000000C206D88>]   
[alas_硫磺岛] -> [True]                                                                                                
2022-06-25 12:51:50.792 | INFO | <<< SHOW_PROCESSES, TAG[_WAIT_UPDATE 2] >>>                                           
2022-06-25 12:51:55.799 | INFO | <<< SHOW_PROCESSES, TAG[_WAIT_UPDATE 2] >>>                                           
2022-06-25 12:51:55.826 | INFO | process[<module.webui.process_manager.ProcessManager object at 0x000000000C206D88>]   
[alas_硫磺岛] -> [True]                                                                                                
2022-06-25 12:51:55.860 | INFO | <<< SHOW_PROCESSES, TAG[_WAIT_UPDATE 2] >>>                                           
2022-06-25 12:52:00.868 | INFO | <<< SHOW_PROCESSES, TAG[_WAIT_UPDATE 2] >>>                                           
2022-06-25 12:52:00.886 | INFO | process[<module.webui.process_manager.ProcessManager object at 0x000000000C206D88>]   
[alas_硫磺岛] -> [True]                                                                                                
2022-06-25 12:52:00.915 | INFO | <<< SHOW_PROCESSES, TAG[_WAIT_UPDATE 2] >>>                                           
2022-06-25 12:52:05.940 | INFO | <<< SHOW_PROCESSES, TAG[_WAIT_UPDATE 2] >>>                                           
2022-06-25 12:52:05.957 | INFO | process[<module.webui.process_manager.ProcessManager object at 0x000000000C206D88>]   
[alas_硫磺岛] -> [True]                                                                                                
2022-06-25 12:52:05.983 | INFO | <<< SHOW_PROCESSES, TAG[_WAIT_UPDATE 2] >>>                                           
2022-06-25 12:52:11.001 | INFO | <<< SHOW_PROCESSES, TAG[_WAIT_UPDATE 2] >>>                                           
2022-06-25 12:52:11.023 | INFO | process[<module.webui.process_manager.ProcessManager object at 0x000000000C206D88>]   
[alas_硫磺岛] -> [True]                                                                                                
2022-06-25 12:52:11.047 | INFO | <<< SHOW_PROCESSES, TAG[_WAIT_UPDATE 2] >>>                                           
2022-06-25 12:52:16.081 | INFO | <<< SHOW_PROCESSES, TAG[_WAIT_UPDATE 2] >>>                                           
2022-06-25 12:52:16.104 | INFO | process[<module.webui.process_manager.ProcessManager object at 0x000000000C206D88>]   
[alas_硫磺岛] -> [True]                                                                                                
2022-06-25 12:52:16.133 | INFO | <<< SHOW_PROCESSES, TAG[_WAIT_UPDATE 2] >>>                                           
2022-06-25 12:52:21.156 | INFO | <<< SHOW_PROCESSES, TAG[_WAIT_UPDATE 2] >>>                                           
2022-06-25 12:52:21.174 | INFO | process[<module.webui.process_manager.ProcessManager object at 0x000000000C206D88>]   
[alas_硫磺岛] -> [True]                                                                                                
2022-06-25 12:52:21.210 | INFO | <<< SHOW_PROCESSES, TAG[_WAIT_UPDATE 2] >>>                                           
2022-06-25 12:52:26.240 | INFO | <<< SHOW_PROCESSES, TAG[_WAIT_UPDATE 2] >>>                                           
2022-06-25 12:52:26.258 | INFO | process[<module.webui.process_manager.ProcessManager object at 0x000000000C206D88>]   
[alas_硫磺岛] -> [True]                                                                                                
2022-06-25 12:52:26.284 | INFO | <<< SHOW_PROCESSES, TAG[_WAIT_UPDATE 2] >>>                                           
2022-06-25 12:52:31.305 | INFO | <<< SHOW_PROCESSES, TAG[_WAIT_UPDATE 2] >>>                                           
2022-06-25 12:52:31.318 | INFO | process[<module.webui.process_manager.ProcessManager object at 0x000000000C206D88>]   
[alas_硫磺岛] -> [True]                                                                                                
2022-06-25 12:52:31.348 | INFO | <<< SHOW_PROCESSES, TAG[_WAIT_UPDATE 2] >>>                                           
2022-06-25 12:52:36.366 | INFO | <<< SHOW_PROCESSES, TAG[_WAIT_UPDATE 2] >>>                                           
2022-06-25 12:52:36.383 | INFO | process[<module.webui.process_manager.ProcessManager object at 0x000000000C206D88>]   
[alas_硫磺岛] -> [True]                                                                                                
2022-06-25 12:52:36.407 | INFO | <<< SHOW_PROCESSES, TAG[_WAIT_UPDATE 2] >>>                                           
2022-06-25 12:52:39.124 | INFO | End of log queue handler loop                                                         
2022-06-25 12:52:39.147 | INFO | [alas_硫磺岛] exited                                                                  
2022-06-25 12:52:41.434 | INFO | Alas [alas_硫磺岛] stopped                                                            
2022-06-25 12:52:41.453 | INFO | Remains: []                                                                           
2022-06-25 12:52:41.469 | INFO | <<< SHOW_PROCESSES, TAG[_WAIT_UPDATE 2] >>>                                           
2022-06-25 12:52:41.481 | INFO | process[<module.webui.process_manager.ProcessManager object at 0x000000000C206D88>]   
[alas_硫磺岛] -> [False]                                                                                               
2022-06-25 12:52:41.513 | INFO | <<< SHOW_PROCESSES, TAG[_WAIT_UPDATE 2] >>>                                           
2022-06-25 12:52:46.533 | INFO | All alas stopped, start updating                                                      
2022-06-25 12:52:46.545 | INFO | <<< RUN UPDATE >>>                                                                    
2022-06-25 12:52:46.571 | INFO | <<< MOCK UPDATE >>>                                                                   
2022-06-25 12:52:46.584 | INFO | Start clearup                                                                         
2022-06-25 12:52:46.614 | INFO | [alas_硫磺岛] exited                                                                  
═══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════
                                                         START                                                         
═══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════
2022-06-25 12:52:52.111 | INFO | <<< WEBUI CONFIGS >>>                                                                 
2022-06-25 12:52:52.135 | INFO | [Theme] default                                                                       
2022-06-25 12:52:52.152 | INFO | [Language] zh-CN                                                                      
2022-06-25 12:52:52.172 | INFO | [Password] False                                                                      
2022-06-25 12:52:52.181 | INFO | [CDN] False                                                                           
2022-06-25 12:52:52.207 | INFO | [Electron] False                                                                      
2022-06-25 12:52:52.222 | INFO | <<< APP.PY STARTUP >>>                                                                
2022-06-25 12:52:52.245 | INFO | app.py startup                                                                        
═══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════
                                                         START                                                         
═══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════
2022-06-25 12:52:53.398 | INFO | Add task <schedule_update (delay=5)>                                                  
2022-06-25 12:52:53.411 | INFO | Start task handler                                                                    
2022-06-25 12:52:53.436 | INFO | <<< RESTART ALAS >>>                                                                  
2022-06-25 12:52:53.483 | INFO | Starting [alas_硫磺岛]                                                                
2022-06-25 12:52:53.510 | INFO | Start alas complete                                                                   
═══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════
                                                         START                                                         
═══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════
2022-06-25 12:52:55.221 | INFO | [Server] cn                                                                           
2022-06-25 12:52:55.298 | INFO | Using template config, which is read only                                             
2022-06-25 12:52:55.501 | INFO | Add task <Switch_state_refresh (delay=2)>                                             
2022-06-25 12:52:55.565 | INFO | Add task <Switch_visibility_state_refresh (delay=15)>                                 
2022-06-25 12:52:55.595 | INFO | Add task <Switch_update_state_refresh (delay=1)>                                      
2022-06-25 12:52:55.647 | INFO | Start task handler                                                                    
2022-06-25 12:52:55.705 | INFO | [Server] cn                                                                           
2022-06-25 12:52:55.768 | INFO | Bind task {'', 'General', 'Alas'}                                                     
2022-06-25 12:52:56.421 | INFO | Add task <Switch_scheduler_btn_refresh (delay=1)>                                     
2022-06-25 12:52:56.460 | INFO | Add task <Switch_log_scroll_btn_refresh (delay=1)>                                    
2022-06-25 12:52:56.493 | INFO | Add task <alas_update_overiew_task (delay=10)>                                        
2022-06-25 12:52:56.550 | INFO | Add task <put_log (delay=0.25)>                                                       
2022-06-25 12:52:58.457 | INFO | >>>> _chec_update, cnt:1                                                              
2022-06-25 12:52:58.471 | INFO | No update                                                                             
2022-06-25 12:53:03.479 | INFO | >>>> _chec_update, cnt:2                                                              
2022-06-25 12:53:03.507 | INFO | No update                                                                             
2022-06-25 12:53:08.524 | INFO | >>>> _chec_update, cnt:3                                                              
2022-06-25 12:53:08.549 | INFO | No update                                                                             
2022-06-25 12:53:13.597 | INFO | >>>> _chec_update, cnt:4                                                              
2022-06-25 12:53:13.615 | INFO | No update                                                                             
2022-06-25 12:53:14.107 | INFO | Task <Switch_scheduler_btn_refresh (delay=1)> removed.                                
2022-06-25 12:53:14.151 | INFO | Task <Switch_log_scroll_btn_refresh (delay=1)> removed.                               
2022-06-25 12:53:14.174 | INFO | Task <alas_update_overiew_task (delay=10)> removed.                                   
2022-06-25 12:53:14.209 | INFO | Task <put_log (delay=0.25)> removed.                                                  
2022-06-25 12:53:14.287 | INFO | End of task handler loop                                                              
2022-06-25 12:53:14.307 | INFO | Finish task handler                                                                   
2022-06-25 12:53:14.327 | INFO | Start clearup                                                                         
2022-06-25 12:53:14.740 | INFO | [alas_硫磺岛] exited                                                                  
2022-06-25 12:53:14.759 | INFO | End of task handler loop                                                              
2022-06-25 12:53:14.783 | INFO | Finish task handler                                                                   
2022-06-25 12:53:14.797 | INFO | Alas closed.              

简要分析

  • 12:51:40 gui 发现更新,等待所有 alas 停止
// gui.txt
2022-06-25 12:51:40.473 | INFO | >>>> _chec_update, cnt:7                                                              
2022-06-25 12:51:40.498 | INFO | New update avaliable                                                                  
2022-06-25 12:51:40.512 | INFO | Waiting all running alas finish.                                                      
2022-06-25 12:51:40.524 | INFO | <<< SHOW_PROCESSES, TAG[_WAIT_UPDATE 1] >>>                                           
2022-06-25 12:51:40.543 | INFO | process[<module.webui.process_manager.ProcessManager object at 0x000000000C206D88>]   
[alas_硫磺岛] -> [True]                                                                                                
2022-06-25 12:51:40.577 | INFO | <<< SHOW_PROCESSES, TAG[_WAIT_UPDATE 1] >>>  
  • 12:51:44 alas 发现更新,停止自身
// alas.txt
2022-06-25 12:51:44.292 | INFO | Update event detected                                                                 
2022-06-25 12:51:44.324 | INFO | [alas_硫磺岛] exited. Reason: Update                                                  
2022-06-25 12:51:44.344 | INFO | [<_MainThread(MainThread, started 6992)>] 
  • 从 gui 的视角,alas 还没有停止,继续循环等待。(且将一直等待下去,除非人为停止。)
// gui.txt
2022-06-25 12:52:00.868 | INFO | <<< SHOW_PROCESSES, TAG[_WAIT_UPDATE 2] >>>                                           
2022-06-25 12:52:00.886 | INFO | process[<module.webui.process_manager.ProcessManager object at 0x000000000C206D88>]   
[alas_硫磺岛] -> [True]                                                                                                
2022-06-25 12:52:00.915 | INFO | <<< SHOW_PROCESSES, TAG[_WAIT_UPDATE 2] >>>       
// gui.txt          
2022-06-25 12:52:05.940 | INFO | <<< SHOW_PROCESSES, TAG[_WAIT_UPDATE 2] >>>                                           
2022-06-25 12:52:05.957 | INFO | process[<module.webui.process_manager.ProcessManager object at 0x000000000C206D88>]   
[alas_硫磺岛] -> [True]                                                                                                
2022-06-25 12:52:05.983 | INFO | <<< SHOW_PROCESSES, TAG[_WAIT_UPDATE 2] >>>   
  • 手动点击停止按钮。gui 检查到所有 alas 停止,执行更新。
// gui.txt
2022-06-25 12:52:39.124 | INFO | End of log queue handler loop                                                         
2022-06-25 12:52:39.147 | INFO | [alas_硫磺岛] exited                                                                  
2022-06-25 12:52:41.434 | INFO | Alas [alas_硫磺岛] stopped                                                            
2022-06-25 12:52:41.453 | INFO | Remains: []                                                                           
2022-06-25 12:52:41.469 | INFO | <<< SHOW_PROCESSES, TAG[_WAIT_UPDATE 2] >>>                                           
2022-06-25 12:52:41.481 | INFO | process[<module.webui.process_manager.ProcessManager object at 0x000000000C206D88>]   
[alas_硫磺岛] -> [False]                                                                                               
2022-06-25 12:52:41.513 | INFO | <<< SHOW_PROCESSES, TAG[_WAIT_UPDATE 2] >>>                                           
2022-06-25 12:52:46.533 | INFO | All alas stopped, start updating                                                      
2022-06-25 12:52:46.545 | INFO | <<< RUN UPDATE >>>                                                                    
2022-06-25 12:52:46.571 | INFO | <<< MOCK UPDATE >>>                                                                   
2022-06-25 12:52:46.584 | INFO | Start clearup                                                                         
2022-06-25 12:52:46.614 | INFO | [alas_硫磺岛] exited                  

yzbyzz avatar Jun 25 '22 05:06 yzbyzz

试试这个

from multiprocessing import Process
import os
import time


def sysexit():
    print("Run sysexit function")
    time.sleep(3)
    print("Call exit")
    exit(0)
    print("sysexit finish")


def osexit():
    print("Run osexit function")
    time.sleep(3)
    print("Call exit")
    os._exit(0)
    print("osexit finish")


def run(p: Process):
    p.start()
    for _ in range(5):
        time.sleep(1)
        print(p.is_alive())
    print("Kill process")
    p.kill()
    time.sleep(1)
    print(p.is_alive())


if __name__ == "__main__":
    ps = Process(target=sysexit)
    po = Process(target=osexit)

    run(ps)
    run(po)

18870 avatar Jun 25 '22 05:06 18870

  • Windows7 运行结果
Run sysexit function
True
True
True
Call exit
False
False
Kill process
False
Run osexit function
True
True
True
Call exit
False
False
Kill process
False

项目中两个停止进程的路径,除了使用的方法不同,两者对应的脚本也是不同的。

  • alas.py
  • module/webui/app.py

yzbyzz avatar Jun 25 '22 05:06 yzbyzz

看到有两种停止的方式

  • alas 自己发现更新时 exit 退出进程。(Windows7 is_alive 一直为 true)

https://github.com/LmeSzinc/AzurLaneAutoScript/blob/7bfff9019ea1740e93cb20ba34b7958230508b2b/alas.py#L322-L343

  • 手动点击停止按钮,使用的 ProcessManager 的 stop 方法,方法使用了 kill。(Windows7 is_alive 会变为 false)

https://github.com/LmeSzinc/AzurLaneAutoScript/blob/7bfff9019ea1740e93cb20ba34b7958230508b2b/module/webui/app.py#L326-L335

这里可能应该统一一下退出的方式?

yzbyzz avatar Jun 25 '22 06:06 yzbyzz

发现更新的时候需要等alas完成任务自己退出,否则可能会卡在某个页面无法再启动。 正常情况下都能自己退出,没有必要跨进程通信让父进程把子进程杀了

你这个我确实想不到什么情况了,~~摆了~~

18870 avatar Jun 25 '22 13:06 18870

我先按照上面提到的修改配置文件来禁止自动更新吧。 目前看来可能遇到这个问题的人不多,先暂时这样吧。 后面再看看能不能找到原因。

yzbyzz avatar Jun 26 '22 12:06 yzbyzz

我的Windows7也同样遇到了此问题。一开始还以为是网络波动导致的。

LostMyMind avatar Nov 11 '22 01:11 LostMyMind