Eu sei que essa é uma pergunta antiga, mas acho que tenho uma resposta alternativa para isso.
Eu estava passando pelo mesmo problema. O log mostraria gunicorn tentando iniciar e, em seguida, muitas entradas mostrando a porta já está em uso.
Eu percebi que tinha entrado no virtualenv ANTES de executar meu script. Que então ativou o virtualenv novamente. Isso parece rodar o script duas vezes no trote. Assim que eu desativei meu console virtualenv e deixei o script manipular o virtualenv, tudo funcionou como esperado.
Espero que isso ajude alguém.