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秒,此时玩家可再次发起对话>
游戏结束
阅读 1.8k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题