2010-10-10 11 views
4

Je travaille sur un jeu basé sur du texte en Python 3.1 qui utiliserait le timing comme source majeure de jeu. Afin de le faire efficacement (plutôt que de vérifier l'heure de chaque boucle principale, ma méthode actuelle, qui peut être inexacte, et lente si plusieurs personnes jouent au jeu à la fois) je pensais à utiliser la classe Threading.Timer. Est-ce une mauvaise chose d'avoir plusieurs minuteurs en même temps? si oui, combien de minuteurs est recommandé?L'utilisation de plusieurs temporisateurs en Python est-elle dangereuse?

Par exemple, l'utilisateur entre pour lancer le jeu. Chaque seconde après le début du jeu, il décide si quelque chose arrive ou non, donc il y a un Timer (1) pour chaque utilisateur jouant en même temps. Si quelque chose se produit, le joueur a un certain temps pour réagir, donc une minuterie doit être réglée pour cela. Si l'utilisateur réagit assez rapidement, cette minuterie doit se terminer et un nouveau minuteur sera défini en fonction de ce qui va se passer, etc.

Répondre

3

Je pense que c'est une mauvaise idée d'utiliser des minuteurs dans votre cas. L'utilisation des threads retardés en python se traduira par un code plus complexe, moins de précision et des performances potentiellement moins bonnes. Fondamentalement, la règle est que si vous pensez que vous avez besoin de threads, vous ne le faites pas. Très peu de programmes bénéficient de l'utilisation de threads.

Je ne sais pas ce que vous faites pour la saisie. Vous faites référence à plusieurs joueurs et je ne suis pas sûr que ce soit sur un seul clavier ou peut-être en réseau. Quoi qu'il en soit, votre stratégie actuelle d'une boucle principale pourrait bien être la meilleure stratégie. Bien que sans voir comment fonctionne votre boucle principale, il est difficile de dire avec certitude.

+0

par le biais d'un réseau de discussion, de sorte que l'entrée est basée sur l'utilisation de commandes dans ledit chat par exemple. ! jeu de jeu. le mainloop est assez simple, il vérifie s'il y a des paquets dans le socket, puis il vérifie les plugins 'onloop' ajoutés par l'utilisateur, le plugin ici étant les minuteurs du jeu, je suis juste inquiet de la file d'attente ... La façon d'exécuter les choses va ralentir le gameplay, ce qui m'inquiète car il est basé sur le temps de réaction et le décalage est un facteur majeur. – Blazer

+0

La manière de faire la queue est la façon dont fonctionnent tous les systèmes gui. Il n'y a pas d'alternative vraiment plus rapide que vous pouvez utiliser. –

+0

Lag peut être un problème. Cependant, se concentrer sur la vitesse de votre application, c'est comme se concentrer sur les quelques minutes qu'il faut pour quitter votre maison en raison du voyage de 2 mois à travers l'océan. Sauf si vous faites des choses très mal, la vitesse de votre application ne fera pas une différence notable. –

1

Il devrait être parfaitement sûr de faire fonctionner plusieurs minuteurs en même temps. Prenez garde à ce que cela ne donne pas un coup de pouce aux performances, car l'interpréteur CPython (l'interpréteur Python standard) utilise un GIL (Global Interpreter Lock) qui rend le threading un peu lent.