Python中是否必须在子协程结束后才能结束主协程?

发布于 2022-09-12 02:43:42 字数 800 浏览 28 评论 0

问题描述

假设我在一个协程函数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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文