Apagar arquivo enquanto estiver em uso

2

Eu tenho um processo que recebe um arquivo de vídeo (RAW) e o transcodifica com FFMPEG gerando três (diferentes resoluções) arquivos resultantes. Estou usando um sistema de fila de tarefas distribuídas ( Celery ) para processar cada processo do FFMPEG em uma tarefa assíncrona diferente. / p>

As três tarefas são executadas, de acordo com o fluxo

  • Converter vídeo
  • Carregar resultado em um intervalo na nuvem
  • Excluir resultado

E uma última tarefa carrega o vídeo RAW (usado para transcodificação) para o intervalo e o exclui.

Se eu iniciar as três tarefas de forma assíncrona e excluir o arquivo RAW logo depois, as tarefas (que estão usando o arquivo RAW) serão interrompidas, excluindo o arquivo?

PS: Presumo que o arquivo RAW esteja carregado na memória e aberto três vezes, enquanto a tarefa de transcodificação foi iniciada.

    
por Mauro Baraldi 22.10.2015 / 07:08

2 respostas

3

A suposição de que o arquivo RAW completo está na memória não é verdadeira. Normalmente, quando um arquivo é aberto, o processo obtém um descritor de arquivo que pode ser usado para ler / gravar o arquivo.

Quando um arquivo é aberto por um processo e depois é excluído enquanto o arquivo ainda está aberto, na verdade, ele não é excluído instantaneamente. O arquivo é realmente excluído quando não há mais processos com alças (descritores de arquivo) para esse arquivo. Você pode usar lsof para ver se o arquivo ainda tem alças e quando você exclui esse arquivo, ele é listado com o texto (deleted) anexado à linha.

O espaço em disco também não é recuperado quando um arquivo aberto é excluído, portanto, é seguro continuar usando o arquivo enquanto ele estiver aberto. Quando o arquivo excluído não tiver mais descritores de arquivos ativos, o sistema de arquivos recuperará o espaço em disco consumido.

    
por 22.10.2015 / 09:13
2

Se todos os três processos ffmpeg abriram o arquivo de entrada antes de excluí-lo, então é bem possível que isso funcione. Mas, se o ffmpeg fechar o arquivo e reabri-lo, ele falhará. Se você puder determinar que o ffmpeg não faz isso, então provavelmente você está seguro.

    
por 22.10.2015 / 07:25