如何在Python中创建并行任务

时间:2016-07-21 05:13:45

标签: python multithreading

我正在为电报组创建一个战斗游戏作为我的初学者的项目,一个玩家挑战另一个,然后在聊天中发生战斗。现在我想为它实现一个“超时”功能。 我已经设法使用_thread使其工作:

import _thread
class Battle:
    def __init__(self, chat_id):
        self.chat = chat
        print('Instance of battle started on chat %s' % self.chat)
        self.pcount = 0
        self.p1score = 0
        self.p2score = 0

    def reset(self):
        self.pcount = 0
        self.p1score = 0
        self.p2score = 0

def timeout(chat_id):
    time.sleep(90)
    battle = battledic[chat_id]
    if battledic[chat_id].timer == 1:
        sendmessage(chat_id, 'no one accepted') # first parameter is the chat address and the second one is the message
        battle.reset()
    else:
        return

battle = Battle(chat_id)
if message == "challenge":
    if battle.pcount == 0:
        _thread.start_new_thread(timeout, (chat_id,))
...

所以基本上我正在做的是调用超时功能,即在不同的线程中睡眠90秒,然后它检查战斗是否仍然只有一个玩家(pcount == 1),如果它在这种情况下,它会向聊天发送一条消息,告诉他们战斗没有开始,然后重置战斗实例。

这里的问题是我经常提出异常,即使它在大多数情况下都能正常运行,有时它也没有达到预期的效果,关闭正在进行的战斗。研究我发现这不是理想的做法,但我找不到更好的解决方案,也许我想从其他聊天中同时进行其他战斗。在这种情况下应该使用什么?合作多任务?多?斩首模块?感谢有关此任务的任何提示!

1 个答案:

答案 0 :(得分:1)

我让你开始了。我不确定你将如何聊天或记录谁在玩。

我的第一个想法是运行线程,但while循环更容易。

<script>
  var socket = io();
  var selfId;
      socket.on('playerinfo', function(data){
        selfId = data.name;
        playerInfo = data.players;
        $('.top').html(playerInfo);
        $('.bottom')html(selfId);
      });
      socket.on('move', function(data){
        if(data.uid == selfId)
        {
          $('.top').html(data.card);
        }
        else
        {
          $('.bottom')html(data.card);
        }
      });
      socket.emit('move', {card:A, uid:56836480193347838764});
    </script>