2014-10-31 2 views
0

기본적으로 클래스의 메소드 인 4 개의 독립 스레드를 시작하고 싶습니다. 나는 아래의 코드에서 잘못하고 무엇을 생각 : 여러 스레드를 시작할 때의 파이썬 스레딩 문제

from threading import Thread 
import time 
import random 

class Creature: 
    def __init__(self, name): 
     self.name = name 

    def melee(self, level): 
     self.melee = level 

    def shielding(self, level): 
     self.shielding = level 

    def health(self, total): 
     self.health = total 

    def attack(self, attacker, opponent): 
     while 0 != 1: 
      power = random.randint(1, attacker.melee) 
      resistance = random.randint(1, opponent.shielding) 
      resultant = power - resistance 
      if resistance > 0: 
       opponent.health -= resistance 
       if opponent.health < 0: 
        print(opponent.name, " is dead") 
        print("Opponent's health ", opponent.health) 
        quit() 
       else: 
        print(attacker.name, " delivered an attack of ", resistance) 
        print("Opponent's health ", opponent.health) 

    def healing(self, healed): 
     while 0 != 1: 
      if healed.health <= 0: 
       if healed.health < 50: 
        life = random.randint(1, 50) 
        healed.health += life 
        if healed.health > 100: 
         healed.health = 100 
        print(healed.name, " has healed and now has a health of ", self.health) 

Monster = Creature("Wasp") 
Monster.health = 100 
Monster.melee = 30 
Monster.shielding = 15 

Player = Creature("Knight") 
Player.health = 100 
Player.melee = 25 
Player.shielding = 20 

t1 = Thread(target=Player.attack(Monster, Player)) 
t1.start() 
t2 = Thread(target=Monster.attack(Player, Monster),) 
t2.start() 
t3 = Thread(target=Player.healing(Player), args=()) 
t3.start() 
t4 = Thread(target=Monster.healing(Monster), args=()) 
t4.start() 

는 어떻게 든 난 단지 T1이 시작됩니다 이후 뭔가 잘못하고있는 중이 야. 프로그램이 t1 만 시작하는 이유는 무엇입니까? :-(

감사

+2

'while 0! = 1' 대신'while while'을 사용하십시오. 눈을 가리고 말하기 쉽습니다. –

답변

1

코드에서 문제 (들)이 한 줄의 모든 논증은 다음과 같습니다!

t1 = Thread(target=Player.attack(Monster, Player)) 
의 문제점은 당신이 이 전달 Player.attack을하지 호출하는 것이다

그것을 쓰레드 생성자에게 넘겨라. 당신의 공격 방법은 결코 돌아 오지 않으므로 첫 번째 쓰레드를 생성하려는 시도를 결코 지나치지 않을 것입니다 :

t1 = Thread(target = Player.attack, args = (Monster, Player)) 
+0

감사합니다 g.d.d.c 이것이 문제입니다 : D –

관련 문제