如何让python线程倒计时然后执行操作?

时间:2016-09-19 05:27:37

标签: python multithreading python-telegram-bot

我有一个访问Telegram机器人api的脚本,但不幸的是,它一次只能处理一条消息。

我的最终目标是在有人开始游戏时启动计时器线程,并在一段时间后(如果他们还没有赢得游戏),它会重置游戏以避免阻止其他用户玩游戏的小组(我将其设置为一次只有一个游戏以避免混淆)。

例如:

我试过一个单词解读游戏:

import time
import telepot

def handle(msg):
    message_text = msg['text']
    message_location_id = msg['chat']['id']
    global game_active
    global word_to_unscramble
    if message_text == '/newgame':
        game_active = True
        <game function, defines word_to_unscramble>
        time.sleep(30)
        if game_active:
            game_active = False
            word_to_unscramble = None
            bot.sendMessage(message_location_id, 'Sorry the answer was ' + word_to_unscramble)
    if message_text == 'word_to_unscramble':
        game_active = False
        bot.sendMessage(message_location_id, 'You win!')

# I added this part in as an echo, just to see when it processed the message
    if 'text' in msg:
        bot.sendMessage(message_location_id, message_text)

game_active = False

word_to_unscramble = None

bot = telepot.Bot('<my api token>')

bot.message_loop(handle)

但是,使用此代码,它将接收并处理第一条消息,然后等待30秒,发送失败的代码,然后处理第二条消息。

我对线程的处理过程并不太熟悉,所以有没有办法设置它来启动一个新的线程来处理倒数计时器,这样它就可以继续处理消息了,或者说这一切都丢失了引起?

如果没有办法使用我当前访问电报api的方法来设置计时器,那么更聪明的方法是什么?

1 个答案:

答案 0 :(得分:0)

Haven还没有使用过python-telegram-bot,但是我所知道的Python中使用的计时器使用sched可以让你利用你的python代码的计时器功能。由于您的应用multithreading会更有意义,因此您可以留意threading.Timer课程。