Pergunta

Estou tendo um problema em usar o IMAPLIB no Python 2.6 com o mais recente Django SVN. Quero baixar e -mails IMAP em uma fila (usando o CELERYD). Consigo conectar/baixar e -mails da linha de comando, mas quando descarrego a tarefa através do Django para Celeryd, recebo este erro: "SSLERROR: [Errno 1] _ssl.c: 1325: Erro: 1408f10b: SSL Rotinas: ssl3_get_record : número de versão errada ".

Os documentos de imaplib não mencionam como especificar uma versão do SSL. Estou tentando extrair e -mails do Gmail. Não entendo por que descarregar a tarefa para uma fila usando o CELERYD faria com que a tarefa falhe. Qualquer ajuda seria muito apreciada.

EDIT: Aqui está um rastreamento de pilha:

Arquivo "/usr/lib/python2.6/imaplib.py", linha 643, em selecionar typ, dat = self._simple_command (nome, caixa de correio)

Arquivo "/usr/lib/python2.6/imaplib.py", linha 1059, em _simple_command retornar self._command_complete (nome, self._command (nome, *args))

Arquivo "/usr/lib/python2.6/imaplib.py", linha 889, em _Command_Complete Typ, Data = self._get_tagged_Response (tag)

Arquivo "/usr/lib/python2.6/imaplib.py", linha 990, em _get_tagged_pressonse self._get_ressonse ()

Arquivo "/usr/lib/python2.6/imaplib.py", linha 907, em _get_Response resp = self._get_line ()

Arquivo "/usr/lib/python2.6/imaplib.py", linha 1000, em _get_line line = self.readline ()

Arquivo "/usr/lib/python2.6/imaplib.py", linha 1170, no readline char = self.ssslobj.read (1)

Arquivo "/usr/lib/python2.6/ssl.py", linha 136, em Read Return self._ssslobj.read (len)

SSLERROR: [ERRNO 1] _SSL.C: 1325: Erro: 1408F10B: SSL Rotinas: SSL3_GET_Record: Número da versão errada

EDIT: Aqui está a tarefa que estou tentando executar, onde o IMAP_PARSER é um módulo que envolve o iMaplib e carrega emails no meu banco de dados.

class DumpIMAPData(Task):
    def run(self, user, username, password, imap_address, **kwargs):
        logger = self.get_logger(**kwargs)
        celery.log.redirect_stdouts_to_logger(logger, loglevel=None)
        #imap_address is e.g. 'imap.gmail.com'                                  
        parser = imap_parser.IMAPFetcher(imap_address, username, password, user\
)
        parser.load_all_emails()
    return True

Percebi que a tarefa realmente será executada usando o aipo, a menos que eu daemonize a tarefa usando o sinalizador - -De -Detach. Não sei por que a tarefa falharia apenas quando executada como daemon. Eu tentei definir o mesmo UserID e GroupID com as bandeiras -u e -g, o mesmo UMASK e garantir que o caminho e os diretórios de trabalho sejam os mesmos para o daemon e a versão não damonizada, mas a tarefa ainda não será executada no aipo, quando o aipo está funcionando como um daemon.

Estou usando a versão mais recente do aipo (0.9.4).

Foi útil?

Solução 2

De acordo com o Criador de Celeryd:

O aipo não faz mais seu próprio destacamento a partir de 01a8a0e. Houve muitos problemas com ele e, como funciona ao se destacar usando o Start-Stop-Daemon, Supervisord, Launchd e assim por diante, você é incentivado a usar essas ferramentas.

Outras dicas

Se ele quebrar apenas quando executado dentro do trabalhador do aipo, pode haver algo com o AMQPLIB (que usa o módulo SSL) ou pode haver algo com multiprocessamento e bifurcação (uma variável global que foi inicializada antes do garfo que não está mais vivo)

Você poderia incluir a tarefa que está tentando executar? Você se conecta ao servidor dentro da tarefa em si ou é algum tipo de objeto compartilhado?

Você está se conectando a uma porta que não está falando TLS. Você está tentando conversar com um servidor de correio habilitado para TLS/SSL ou o aipo está tentando usar o TLS para sua conexão AMQP?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top