2015-07-15 3 views
1

J'essaye de paralléliser un code en Python mais j'ai quelques problèmes. Ceci est la partie du code:Exécution inattendue de MPI

survivor = Survivor(32*2, 32*4) 
if rank == 1: 
    a = 'audio/zombie_theme.ogg' 
    b = 'images/dungeon.jpg' 
    c = 'images/dead.jpg' 
    d = survivor.movement() 
else: 
    a = None 
    b = None 
    c = None 
    d = None 

a = comm.bcast(a, root=1) 
b = comm.bcast(b, root=1) 
c = comm.bcast(c, root=1) 
d = comm.bcast(d, root=1) 

if rank == 0: 
    pygame.mixer.music.load(a) 
    pygame.mixer.music.play(-1) 
    pygame.display.set_caption('Zombie Game') 
    screen = pygame.display.set_mode((display_width,display_height)) 
    Tile.pre_init(screen) 
    clock = pygame.time.Clock() 
    dungeon = pygame.image.load(b) 

    keepPlaying = True 
    while keepPlaying: 

     screen.blit(dungeon, (0,0)) 
     Zombie.spawn(total_frames, FPS) 
     Zombie.update(screen, survivor) 
     d 

Quand j'appelle d la dernière ligne, il ne devrait pas appeler survivor.movement() définie dans le processus 1? Quand je lance le jeu, mon personnage principal ne bouge pas, comme il est supposé le faire. Mais, quand je supprime d de partout et que je place survivor.movement() dans la dernière ligne, cela fonctionne comme prévu. Quelqu'un pourrait-il m'aider?

Répondre

2
d = survivor.movement 

Supprimer les accolades. Quand vous écrivez d = movement(), vous assignez réellement d à ce que le mouvement retourne, pas la fonction elle-même.