2010-06-16 1 views
3

Проект, над которым я сейчас работаю, в основном принимает изображение, а затем отображает видео с помощью блендера из командной строки. На данный момент я использую Twisted для рассмотрения запросов, но, безусловно, я что-то делаю неправильно, так как он не работает, как мне хотелось бы. Вы можете увидеть суть программы here (я лишил ничего лишнего).Отправка на стороне сервера с использованием blender и twisted (python)

Выполнение рендеринга производится путем нереста подпроцесса (я знаю Twisted can handle processes) и python script для настройки рендеринга и использования изображения, представленного в виде текстуры.

Программа должна уметь обрабатывать как можно больше соединений. На данный момент подпроцесс делает один рендер за раз, но в идеале он будет проверять CPU/количество параллельных рендерингов и корректировать число до оптимального. Каждый рендер является обычным для пользователя, поэтому, как только пользовательский рендеринг завершен, он должен вернуть свою визуализацию (файл avi).

Мой вопрос: Является ли правильный выбор для этого? Есть ли другие варианты? Если нет, является ли моя реализация системы ошибочной? Я был бы признателен за любые мысли или мнения по этому поводу!

+0

Я работаю в аналогичном проекте, используя блендер и сервер питона, я хотел бы прямо сейчас если у вас возникли проблемы с памятью blender или что-то в этом роде. Блендер всегда работает на вашем сервере? или вы запускаете блендер для каждого клиента? – 2011-10-11 10:35:17

+0

Мы запускали блендер из командной строки каждый раз, когда хотели его использовать. Мы использовали [настраиваемые скрипты python] (http://wiki.blender.org/index.php/Doc:Manual/Extensions/Python), чтобы настроить рендер, запустить его и добиться прогресса. Мы использовали сельдерей и RabbitMQ для работы в очереди, чтобы за один раз запускать только одно задание. – betamax

ответ

3

Is Twisted the right choice for this? - Возможно.

Are there other options? - Да.

If not, is my implementation of the system flawed? - Да. Мне кажется, что ваш вызов подпроцесса блокируется: p.wait()

Возможно, это похоже на то, что вы пытаетесь сделать в Twisted, но вы очень далеко от него.

Вам нужна управляемая скоростью асинхронная очередь задач с веб-интерфейсом.

У вас есть одна страница на однопоточном «сайте», которая не возвращает какой-либо html до тех пор, пока заданное задание не будет завершено.

Возможно в витой. Однако это, вероятно, проще реализовать с использованием django + celery.

Джанго: http://www.djangoproject.com/
сельдерея: http://celery.github.com/celery/getting-started/introduction.html

И учебник для аналогичной цели:
http://webcookies.org/blog/2009/09/10/rabbitmq-celery-and-django/

+0

Django and Celery - это действительно хорошее решение! Я попробую, а потом отчитаюсь. – betamax

+0

Это было именно то, что я хотел. Благодаря! – betamax

 Смежные вопросы

  • Нет связанных вопросов^_^