Отметьте экземпляры Python из Python - PullRequest
1 голос
/ 26 августа 2009

Я заинтересован в создании игры для программирования с использованием Python, и я хотел бы сделать это в стиле GunTactyx (http://apocalyx.sourceforge.net/guntactyx/index.php). Только гораздо проще, поскольку меня в первую очередь интересует параллельное выполнение сценариев Python из питон.

Gun Tactyx бросает вызов игроку, чтобы написать программу, которая контролирует отдельные юниты, работающие вместе в командах, где каждая инструкция несет временную санкцию. Каждая программа выполняется в собственной защищенной среде, взаимодействуя с игровым миром с помощью функций, которые могут взаимодействовать с игровым миром.

Мне было интересно, есть ли способ Python для достижения подобного эффекта.

Структура псевдокода игрового движка будет выглядеть примерно так:

Instantiate units with individual programs
while 1
   Update game world
   for unit in units:
      unit.tick()

Симуляция будет выполняться до истечения времени ожидания или какого-либо целевого условия.

С уважением

/ Tax

1 Ответ

1 голос
/ 26 августа 2009

Возможно, вам стоит взглянуть на форк Python: без стека , он позволяет одновременно запускать тысячи микропотоков без значительного снижения производительности - каждый «поток» (это не настоящие потоки ОС) может быть одним Unit.

Также очень легко реализовать модель Actor со стеком:

В актерской модели все является актером (дух!). Актеры - это объекты (в общем смысле, не обязательно в смысле ОО), которые могут: Получать сообщения от других актеров. Обработайте полученные сообщения так, как они считают нужным. Отправляйте сообщения другим актерам. Создать новых актеров.

Актеры не имеют прямого доступа к другим актерам. Все общение осуществляется через передачу сообщений. Это обеспечивает богатую модель для моделирования объектов реального мира, которые слабо связаны и имеют ограниченное знание внутренних компонентов друг друга.

из Introduction to concurrent programming with stackless

В качестве альтернативы, вы также можете смоделировать это поведение, реализуя сопрограммы - используя генераторы Python, как показано здесь . Но я думаю, вам будет лучше, если у вас не будет стека, так как все это уже есть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...