Welcome to WuJiGu Developer Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
442 views
in Technique[技术] by (71.8m points)

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

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)
等待大神解答

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to WuJiGu Developer Q&A Community for programmer and developer-Open, Learning and Share
...