
Após a conclusão do processo, vejo que o arquivo de bloqueio não foi excluído. Existe alguma razão para flock
manter o arquivo? Além disso, como flock
sabe se há um bloqueio adquirido?
Aqui está o exemplo de um crontab
arquivo
* * * * * flock python <script_name>.py
Responder1
Para a maioria dos casos de uso do flock
, é muito importante que o arquivo de bloqueionãoser “limpo”. Caso contrário, imagine este cenário:
- o processo A abre o arquivo de bloqueio, descobre que ele não existe e o cria.
- o processo A adquire o bloqueio
- o processo B abre o bloqueio (descobre que ele já existe)
- o processo B tenta adquirir o bloqueio, mas tem que esperar
- processo A libera o bloqueio
- o processo B adquire o bloqueio instantaneamente
- o processo A exclui o arquivo de bloqueio
- o processo C abre o arquivo de bloqueio, descobre que ele não existe e cria um novo. Observe que agora ele está mantendo aberto umdiferentelock arquivo que aquele que o processo B bloqueou.
- o processo C tenta adquirir o bloqueio e consegue... mas deveria ter esperado, porque o processo B ainda tem [uma encarnação anterior do] arquivo de bloqueio aberto e bloqueado.