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

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秒,此时玩家可再次发起对话>

游戏结束

以上是 Python中是否必须在子协程结束后才能结束主协程? 的全部内容, 来源链接: utcz.com/p/937833.html

回到顶部