Ошибка python imaplib ssl при использовании очереди celeryd - PullRequest
2 голосов
/ 07 января 2010

У меня проблема с использованием imaplib на python 2.6 с последней версией django svn. Я хочу загружать электронные письма imap в очередь (используя celeryd). Я могу подключать / загружать электронные письма из командной строки, но когда я выгружаю задачу через django в celeryd, я получаю эту ошибку: "SSLError: [Errno 1] _ssl.c: 1325: ошибка: 1408F10B: процедуры SSL: SSL3_GET_RECORD : неправильный номер версии ".

В документации Imaplib не указано, как указать версию SSL. Я пытаюсь получить почту из Gmail. Я не понимаю, почему выгрузка задачи в очередь с помощью celeryd может привести к сбою задачи. Любая помощь будет высоко ценится.

Редактировать: вот трассировка стека:

Файл "/usr/lib/python2.6/imaplib.py", строка 643, в выбранном typ, dat = self._simple_command (имя, почтовый ящик)

Файл "/usr/lib/python2.6/imaplib.py", строка 1059, в _simple_command вернуть self._command_complete (имя, self._command (имя, * аргументы))

Файл "/usr/lib/python2.6/imaplib.py", строка 889, в _command_complete typ, data = self._get_tagged_response (tag)

Файл "/usr/lib/python2.6/imaplib.py", строка 990, в _get_tagged_response self._get_response ()

Файл "/usr/lib/python2.6/imaplib.py", строка 907, в _get_response resp = self._get_line ()

Файл "/usr/lib/python2.6/imaplib.py", строка 1000, в _get_line line = self.readline ()

Файл "/usr/lib/python2.6/imaplib.py", строка 1170, в readline char = self.sslobj.read (1)

Файл "/usr/lib/python2.6/ssl.py", строка 136, для чтения вернуть self._sslobj.read (len)

SSLError: [Errno 1] _ssl.c: 1325: ошибка: 1408F10B: процедуры SSL: SSL3_GET_RECORD: неправильный номер версии

Edit: вот задача, которую я пытаюсь выполнить, где imap_parser - это модуль, который оборачивает imaplib и загружает электронные письма в мою базу данных.

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

Я заметил, что задача на самом деле будет выполняться с использованием сельдерея, ЕСЛИ Я не выполняю задачу с помощью флага --detach. Я не знаю, почему задача не будет выполнена, только если она запускается как демон. Я попытался установить один и тот же идентификатор пользователя и идентификатор группы с флагами -u и -g, одним и тем же umask и убедиться, что путь и рабочие каталоги одинаковы как для демона, так и для недемонизированной версии, но задача все равно не запустится в сельдерее, когда сельдерей работает как демон.

Я использую последнюю версию сельдерея (0.9.4).

Ответы [ 3 ]

1 голос
/ 08 января 2010

Если происходит сбой только при запуске внутри работника сельдерея, это может быть что-то с amqplib (который использует модуль ssl), или это может быть что-то с многопроцессорной обработкой и разветвлением (глобальная переменная, которая была инициализирована до разветвления, которое больше не работает живой)

Не могли бы вы включить задачу, которую вы пытаетесь запустить? Вы подключаетесь к серверу внутри самой задачи, или это какой-то общий объект?

1 голос
/ 24 января 2010

По словам создателя сельдерея:

Сельдерей больше не отделяется от 01a8a0e. С ним было слишком много проблем, и, поскольку он работает при отключении с помощью start-stop-daemon, supervisord, launchd и т. Д., Вам рекомендуется использовать эти инструменты.

0 голосов
/ 07 января 2010

Вы подключаетесь к порту, который не говорит по TLS. Вы пытаетесь общаться с почтовым сервером с поддержкой TLS / SSL, или сельдерей пытается использовать TLS для своего соединения AMQP?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...