我使用 Python SleekXMPP 库制作了一个Farkle Jabber 游戏机器人。在多人游戏模式中,用户轮流与用户对战。我正在尝试设置暂停时间,例如,如果您的对手在 1 分钟内没有回应,您就赢了。
这是我尝试过的:
import sleekxmpp
...
time_received={}
class FarkleBot(sleekxmpp.ClientXMPP):
...
def timeout(self, msg, opp):
while True:
if time.time() - time_received[opp] >= 60:
print "Timeout!"
#stuff
break
def messages(self, msg):
global time_received
time_received[user] = time.time()
...
if msg['body'].split()[0] == 'duel':
opp=msg['body'].split()[1] #the opponent
... #do stuff and send "Let's duel!" to the opponent.
checktime=threading.Thread(target=self.timeout(self, msg, opp))
checktime.start()
上面代码的问题是它会冻结整个班级,直到 1 分钟过去。我怎样才能避免这种情况?我尝试将timeout
功能放在课堂之外,但没有任何改变。