2010-07-13 14 views
2

Inspiré du jeu GunTactyx, où vous écrivez des programmes contrôlant des robots de combat. Guntactyx utilisait la langue Small, qui s'appelle plus tard Pawn. Je cherche à utiliser Python comme langage de script.Ironpython peut-il être utilisé pour exécuter plusieurs instances de machine virtuelle Python en parallèle?

Mes préoccupations sont:

  1. C# Interfaçage Les scripts devraient interface dans C# par fonctions simples, faire des choses comme balayage pour les ennemis, la rotation et tir. Je suppose que chaque fonction devrait être retardée, donc ils prendraient x ms pour retourner.

  2. Mauvais programmes. Le système doit être tolérant aux boucles infinies ou . Je voudrais que chaque machine virtuelle reçoive X ticks à à la fois. Utilisation limitée de la mémoire Les scripts ne devraient pas être autorisés à utiliser utilisation illimitée. Je voudrais une sorte de bouchon de .

  3. probablement beaucoup d'autres problèmes

Je voudrais finir avec quelque chose dans ce style « pseudo ».

robots = a list of robots 

while(1) 
    foreach robot in robots 
     robot.tick() 
    gameworld.update() 

Répondre

1

La réponse à votre question est sujet oui, vous pouvez exécuter plusieurs interprètes en parallèle. Généralement chaque script s'exécutera dans son propre ScriptScope, mais vous pouvez également utiliser ScriptEngine si nécessaire.

  1. Vous pouvez injecter des variables/fonctions dans le cadre d'un script avant de l'exécuter en utilisant scope.SetVariable.

  2. Votre meilleur pari est d'exécuter le code Python sur un fil séparé et de le regarder; Si le retour est trop long, interrompez le fil. (c'est difficile à obtenir à droite, mais c'est une question différente)

  3. Je ne suis pas sûr que cela puisse être appliqué facilement. Cela peut être possible si vous exécutez les scripts dans un AppDomain ou un processus différent, mais cela représente beaucoup de travail supplémentaire pour un gain minimal.

  4. Il suffit de demander!

+0

Il est essentiel que chaque machine virtuelle ait le même nombre de cycles de calcul. Pensez-vous qu'il existe un moyen de le laisser fonctionner de manière contrôlée? – TAXfromDK

+0

Le même nombre de processus, probablement pas, du moins pas sur .NET. Le mieux que vous puissiez faire est de leur donner une fenêtre de temps fixe. –