Python中是否必须在子协程结束后才能结束主协程?
问题描述
假设我在一个协程函数a中调用另一个协程函数b, 是否必须等子协程b结束后才能结束协程a?
如果使用线程,可以在子线程继续执行的情况下结束主线程,那能不能在保持协程b运行的情况下结束协程a?
问题出现的环境背景
这个问题出现在我使用nonebot进行qq机器人开发的时候,
假设一个人发送"开始游戏"开始了一个游戏, 那么这个游戏就需要依赖这个对话存在, 也就是说,当这个对话休眠时(游戏需要),开始游戏的这个人不能发送任何命令.
如果发送了,机器人会返回"您有命令正在执行,请稍后再试",然后已发送的命令会等待游戏结束(对话结束)后再处理.
我认为这是因为nonebot没有实现这个功能(同一个人在同一个聊天中同时运行多个对话)
线程版本
附上线程版本,希望得到类似的结果
import threading
import time
def b():
print("游戏开始")
time.sleep(20)
print("游戏结束")
def a():
print("玩家: 开始游戏!")
threading.Thread(target=b).start()
lock.acquire()
print("玩家会话结束")
lock.release()
lock = threading.Lock()
a()
输出为
玩家: 开始游戏!
游戏开始
玩家会话结束
<延时20秒,此时玩家可再次发起对话>
游戏结束
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论