Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

改进web页面内直接启动 #73

Closed
sanmusen214 opened this issue Jul 18, 2024 · 7 comments
Closed

改进web页面内直接启动 #73

sanmusen214 opened this issue Jul 18, 2024 · 7 comments
Labels
enhancement New feature or request

Comments

@sanmusen214
Copy link
Owner

#69
目前GUI内直接运行是靠启动BAAH.exe然后获取输出流内容实现的显示日志,严格来说不能算在GUI内部启动,也不利于多平台的兼容。
看看能不能改成直接GUI内部调用python方法

@sanmusen214 sanmusen214 added the enhancement New feature or request label Jul 28, 2024
@lihaohong6
Copy link
Contributor

lihaohong6 commented Aug 7, 2024

contextlibredirect_stdoutredirect_stderr应该可以实现?不过这样会把GUI的输出也包含进去。另一个思路是把GUI的logger和本体的logger分开,这样可以直接获取本体logger的输出打在GUI上。

@sanmusen214
Copy link
Owner Author

另一个思路是把GUI的logger和本体的logger分开

目前不是日志隔离的问题。现在是调用exe文件执行BAAH,未来想办法改成多线程/多进程直接通过GUI执行方法

@lihaohong6
Copy link
Contributor

另一个思路是把GUI的logger和本体的logger分开

目前不是日志隔离的问题。现在是调用exe文件执行BAAH,未来想办法改成多线程/多进程直接通过GUI执行方法

要改这个的话,把main.py的内容拆成这样

def main(argv):
    程序本体

if __name__ in ["__main__", "__mp_main__"]:
    main(sys.argv)

run_baah_in_gui.py里面直接用multiprocessing.Process(target=main, args=('', 'config.json'))就可以调用主程序了。

@lonzzi
Copy link
Contributor

lonzzi commented Sep 12, 2024

另一个思路是把GUI的logger和本体的logger分开

目前不是日志隔离的问题。现在是调用exe文件执行BAAH,未来想办法改成多线程/多进程直接通过GUI执行方法

要改这个的话,把main.py的内容拆成这样

def main(argv):
    程序本体

if __name__ in ["__main__", "__mp_main__"]:
    main(sys.argv)

run_baah_in_gui.py里面直接用multiprocessing.Process(target=main, args=('', 'config.json'))就可以调用主程序了。

我现在是用的这种方法跑起来的,终止的方法用的是 process.terminate(),但是这会导致 gui 一并被终止了,下面这张截图是错误信息:

1256370b9b14d5f91835f8c63f81ab77

如果用 process.kill() 的话在我这边测试没有问题,不过这个方法在 Windows 似乎不能生效,不知道还有没有其他方法。

@lihaohong6
Copy link
Contributor

如果用 process.kill() 的话在我这边测试没有问题,不过这个方法在 Windows 似乎不能生效,不知道还有没有其他方法。

我记着应该只有在子进程结束运行(打印GUI_BAAH_TASK_END)的时候有退出的需求吧。与其让主进程监视子进程,不如让子进程直接自动退出。比如用一个变量判断是否需要自动退出

auto_quit = False

def set_auto_quit(b: bool):
    global auto_quit
    auto_quit = b

def get_auto_quit() -> bool:
    return auto_quit

然后在BAAH_auto_quit函数里面用get_auto_quit判断是否需要等待用户输入回车。

开启新进程的代码也要稍微改一下,先进入一个wrapper。因为执行wrapper的时候子进程已经被创建,所以用set_auto_quit修改的就是子进程而不是主进程的状态

def main_wrapper(args):
    set_auto_quit(True)
    main(args)

multiprocessing.Process(target=main_wrapper, args=('', 'config.json'))

@sanmusen214
Copy link
Owner Author

此功能安排在 #113 之后

@sanmusen214
Copy link
Owner Author

closed with #135

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

3 participants