Команда ffmpeg Python запускается только один раз в среде PM2 - PullRequest
0 голосов
/ 28 февраля 2019

PM2 работает как web пользователь.ffmpeg был установлен на Ubuntu 16.04 LTS с использованием sudo apt install ffmpeg.Версия Python 3.6.Программное обеспечение использует ffmpeg-python@0.1.17.

Созданные приложения не выдают ошибок.Когда код ffmpeg выполняется впервые, мы видим вывод, и процесс ffmpeg завершает задачу, как и ожидалось.

Все последующие запросы останавливаются при следующем выполнении ffmpeg.Нет вывода.Нет возврата из процесса ffmpeg.Нет ошибокПроцесс PM2 не выдает ошибку.Журнал приложения останавливается на команде ffmpeg, как будто она зависла.

В чем основная причина? Любая помощь очень важна.

Кроме того, каковы причиныPM2 висит на подпроцессе (например, ffmpeg)?

Вот код:

class ImageHelper:

def __init__(self):
    pass

@classmethod
def create_thumb_from_video_ffmpeg(cls, input_video_file_path,
                                   output_image_path,
                                   scale_width,
                                   scale_height
                                   ):
    """
        This function is used to create the thumb image
        from a source video file.
        We are using a python wrapper/library for FFMPEG
    """
    try:
        if Functions.get_attribute_env('ENVIRONMENT') == 'prod':

            out, err = (
                ffmpeg
                    .input(input_video_file_path, ss="00:00:00.001")
                    .filter('scale', scale_width, scale_height)
                    .output(output_image_path, vframes=1, loglevel='quiet')
                    .overwrite_output()
                    .run(capture_stdout=True)
            )
            print("We only see this once!")
        else:
            out, err = (
                ffmpeg
                    .input(input_video_file_path, ss="00:00:00.001")
                    .filter('scale', scale_width, scale_height)
                    .output(output_image_path, vframes=1)
                    .overwrite_output()
                    .run(capture_stdout=True)
            )
            print("We only see this once!")

        if err:
            if Functions.get_attribute_env('ENVIRONMENT') != 'prod':
                print('ffmpeg video thumb', err)
            else:
                Functions.logger_function(str(err))
            raise Exception(err)
        else:
            return output_image_path

    except Exception as e:
        if Functions.get_attribute_env('ENVIRONMENT') != 'prod':
            print('in thumb exception', e)
        else:
            Functions.logger_function(str(e))
        raise Exception(e)

Ответы [ 3 ]

0 голосов
/ 13 марта 2019

Процессы, порожденные apache или nginx, будут иметь ограничения по продолжительности и будут автоматически убиты.В этих случаях вам, вероятно, понадобится запустить сценарий для запуска вне пула веб-процессов, например.что-то вроде:

setsid /usr/bin/python3 my_script.py 
0 голосов
/ 07 июня 2019

Для тех, кто стоит с проблемой подпроцесса ... решение оказалось связано с плохо сделанной реализацией .env.Когда мы наконец воссоздали .env, проблема ушла.Я на самом деле рекомендовал своей команде использовать Anaconda для нашей среды Python, и это помогло.: 'D

0 голосов
/ 12 марта 2019

Проверьте, запущен ли процесс ffmpeg во время выполнения последовательного запроса или нет.Если это так, вы можете убедиться, что процесс завершен после первого завершения, чтобы он мог начать снова для последовательного запроса.

...