Рендеринг на стороне сервера с использованием блендера и витого (python)

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

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

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

У меня вопрос: подходит ли для этого Twisted? Есть ли другие варианты? Если нет, то является ли моя реализация системы некорректной? Буду признателен за любые мысли или мнения по этому поводу!


person betamax    schedule 16.06.2010    source источник
comment
Я работаю в аналогичном проекте, используя блендер и сервер Python, я хотел бы сейчас, если у вас есть какие-либо проблемы с памятью блендера или что-то в этом роде. Блендер всегда работает на вашем сервере? или вы запускаете блендер для каждого клиента?   -  person    schedule 11.10.2011
comment
Мы запускали блендер из командной строки каждый раз, когда хотели его использовать. Мы использовали пользовательские скрипты Python для настройки рендеринга, запустите это и получить прогресс. Мы использовали сельдерей и RabbitMQ для постановки заданий в очередь, чтобы одновременно выполнялось только одно задание.   -  person betamax    schedule 11.10.2011


Ответы (1)


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.

Django: http://www.djangoproject.com/
Сельдерей: http://celery.github.com/celery/getting-started/introduction.html

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

person MattH    schedule 16.06.2010
comment
Django и Celery кажутся действительно хорошим решением! Я собираюсь попробовать, а потом доложу. - person betamax; 16.06.2010
comment
Это было именно то, что я хотел. Спасибо! - person betamax; 22.06.2010