Pregunta

Tengo problemas para usar imaplib en Python 2.6 con el último Django SVN. Quiero descargar los correos electrónicos IMAP en una cola (usando Cayeryd). Puedo conectar/descargar correos electrónicos desde la línea de comandos, pero cuando descargo la tarea a través de Django a Ceyeryd obtengo este error: "SSLerror: [Errno 1] _SSL.C: 1325: Error: 1408f10b: Rutinas SSL: SSL3_GET_RECORD : número de versión incorrecto ".

Los documentos de imaplib no mencionan cómo especificar una versión de SSL. Estoy tratando de extraer correos electrónicos de Gmail. No entiendo por qué descargar la tarea a una cola usando Cayeryd haría que la tarea falle. Cualquier ayuda sería muy apreciada.

Editar: Aquí hay un rastro de pila:

Archivo "/usr/lib/python2.6/imaplib.py", línea 643, en select typ, dat = self._simple_command (nombre, buzón)

Archivo "/usr/lib/python2.6/imaplib.py", línea 1059, en _simple_command return Self._command_complete (name, self._command (nombre, *args))))

Archivo "/usr/lib/python2.6/imaplib.py", línea 889, en _command_complete typ, data = self._get_tagged_response (etiqueta)

Archivo "/usr/lib/python2.6/imaplib.py", línea 990, en _get_tagged_esponse self._get_response ()

Archivo "/usr/lib/python2.6/imaplib.py", línea 907, en _get_response resp = self._get_line ()

Archivo "/usr/lib/python2.6/imaplib.py", línea 1000, en _get_line line = self.readline ()

Archivo "/usr/lib/python2.6/imaplib.py", línea 1170, en readline char = self.sslobj.read (1)

Archivo "/usr/lib/python2.6/ssl.py", línea 136, en leer return self._sslobj.read (len)

Sslerror: [Errno 1] _SSL.C: 1325: Error: 1408F10B: Rutinas SSL: SSL3_GET_RECORD: Número de versión incorrecto

Editar: Aquí está la tarea que estoy tratando de ejecutar, donde IMAP_PARSER es un módulo que envuelve imaplib y carga correos electrónicos en mi DB.

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

He notado que la tarea realmente se ejecutará usando el apio a menos que demore la tarea usando la bandera - -Detach. No sé por qué la tarea fallaría solo cuando se ejecute como demonio. He intentado configurar el mismo INSEREDID y GroupId con las banderas -u y -g, el mismo umask, y garantizar que la ruta y los directorios de trabajo sean los mismos para el demonio y la versión no dimonizada, pero la tarea aún no se ejecutará en apio cuando el apio está funcionando como un demonio.

Estoy usando la última versión de Celery (0.9.4).

¿Fue útil?

Solución 2

Según el creador de Cereyd:

Celery ya no hace su propio separación a partir de 01A8A0E. Ha habido demasiados problemas con él, y dado que funciona cuando se separa el uso de Start-Stop-Demon, Supervisord, Launchd, etc., se le recomienda que use esas herramientas.

Otros consejos

Si solo se rompe cuando se ejecuta dentro del trabajador de apio, podría haber algo con AmqPlib (que usa el módulo SSL) o podría ser algo con multiprocesamiento y bifurcación (una variable global que se inicializó antes del bifurcado que ya no está vivo)

¿Podría incluir la tarea que está tratando de ejecutar? ¿Se conecta al servidor dentro de la tarea en sí, o es algún tipo de objeto compartido?

Te estás conectando a un puerto que no habla TLS. ¿Está tratando de hablar con un servidor de correo habilitado para TLS/SSL, o el apio está tratando de usar TLS para su conexión AMQP?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top