处理一下quit的情况

This commit is contained in:
limil 2024-10-28 13:47:25 +08:00
parent f94bf4fd8d
commit 3e70d8b27b
2 changed files with 7 additions and 47 deletions

12
main.py
View File

@ -81,10 +81,11 @@ class PikpakConsole(cmd2.Cmd):
return await asyncio.wrap_future(future)
async def aoutput(self, output):
async def PrintOuput(output):
print(output)
future = asyncio.run_coroutine_threadsafe(PrintOuput(output), self.ioLoop)
await asyncio.wrap_future(future)
return ""
# async def PrintOuput(output):
# print(output)
# future = asyncio.run_coroutine_threadsafe(PrintOuput(output), self.ioLoop)
# await asyncio.wrap_future(future)
async def Run(self):
# 1. 设置忽略SIGINT
@ -117,7 +118,8 @@ class PikpakConsole(cmd2.Cmd):
with self.sigint_protection:
if saved_readline_settings is not None:
self._restore_readline(saved_readline_settings)
self.ioLoop.stop()
# https://stackoverflow.com/questions/51642267/asyncio-how-do-you-use-run-forever
self.ioLoop.call_soon_threadsafe(self.ioLoop.stop)
thread.join()
def do_debug(self, args):

42
test.py
View File

@ -1,42 +0,0 @@
import asyncio
import threading
import nest_asyncio
async def aoutput(output):
print(output)
# 定义一个函数来启动事件循环
def start_event_loop(mainloop, newloop):
asyncio.set_event_loop(newloop)
newloop.run_forever()
async def myinput(newloop):
future = asyncio.run_coroutine_threadsafe(asyncio.con(input("input")), newloop)
return await asyncio.wrap_future(future)
async def myoutput(newloop, output):
future = asyncio.run_coroutine_threadsafe(aoutput(output), newloop)
await asyncio.wrap_future(future)
async def main(mainloop, newloop):
while True:
res = await myinput(newloop)
await myoutput(newloop, res)
if __name__ == "__main__":
nest_asyncio.apply()
# 创建一个新的事件循环
main_loop = asyncio.get_event_loop()
new_loop = asyncio.new_event_loop()
# 使用 threading 模块创建一个新线程,并在该线程中运行事件循环
thread = threading.Thread(target=start_event_loop, args=(main_loop, new_loop,))
thread.start()
asyncio.run(main(main_loop, new_loop))
# 等待线程完成
thread.join()