2010-05-24 2 views
2

Возможно ли иметь серверную программу, которая ставит в очередь и управляет процессами, которые выполняются в командной строке?Очередь командной строки на стороне сервера

Проект, над которым я работаю, принимает изображение от пользователя, изменяет изображение, затем применяет его как текстуру к 3D-форме. Эта трехмерная сцена генерируется blender/Cinema 4d в командной строке, которая выводит ее как изображение. Именно этот процесс должен быть поставлен в очередь или каким-то образом управляться из программы на стороне сервера. Конечным результатом, отправленным обратно пользователю, является видео, содержащее анимированную трехмерную форму с изображением в качестве текстуры, применяемой к ней.

Эти рендеры могут занять некоторое время (они могут и не быть), но как я могу обеспечить их выполнение в нужное время и сделать это в порядке очереди?

Это желательно сделать в python.

ответ

1

Отсутствие более подробной информации о том, как/почему вы делаете очередность (может работать только так много за раз, что нужно делать в правильном порядке и т. Д.?), Трудно предложить конкретное решение. Однако основной ответ для любой ситуации заключается в том, что вы хотите использовать subprocess module, чтобы отключить процессы, а затем вы можете смотреть их (используя инструменты, предоставленные вам этим модулем), чтобы подождать, пока они не будут завершены, а затем выполните следующий в очереди.

+0

Поскольку процесс представляет собой трехмерный рендеринг, мне нужно убедиться, что если система вялая, то есть возможность процессов очередей. Я предполагаю, что 50 параллельных рендеров могут привести к краху системы или иметь какой-то негативный эффект. Модули подпроцесса кажутся именно тем, что мне нужно. С немного более подробной информацией о том, как мне это нужно, вы все еще думаете, что подпроцесс является правильным выбором? – betamax

+0

Абсолютно - вы можете решить, исходя из вашей системы, сколько вы думаете, что вы можете запускать одновременно, а затем просто очереди запросов, когда вы достигли этого предела, и обслуживайте их, как только предыдущие завершатся. (Вы также можете делать более экзотические вещи, например, запрашивать систему для использования процессора и памяти и решать, стоит ли начинать больше процессов, но это не зависит от модуля 'subprocess' .. :-)) –