Ошибка SSL Python imaplib с использованием очередей Celeryd

StackOverflow https://stackoverflow.com/questions/2016516

  •  19-09-2019
  •  | 
  •  

Вопрос

У меня проблема с использованием imaplib на Python 2.6 с последним Django SVN. Я хочу скачать электронные письма IMAP в очередь (с помощью Celeryd). Я могу подключать/загружать электронные письма из командной строки, но когда я разгружаю задачу через Django в Celeryd, я получаю эту ошибку: «SSLERROR: [ERRNO 1] _SSL.C: 1325: Ошибка: 1408F10B: SSL Prontines: SSL3_GET_RECORD : неправильный номер версии ».

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

РЕДАКТИРОВАТЬ: вот следование стека:

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

Файл "/usr/lib/python2.6/imaplib.py", строка 1059, в _simple_command return self._command_complete (имя, self._command (name, *args))

Файл "/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, в чтении return self._sslobj.read (len)

SSLERROR: [ERRNO 1] _SSL.C: 1325: Ошибка: 1408F10B: SSL Prontines: SSL3_GET_RECORD: Неправильный номер версии

РЕДАКТИРОВАТЬ: Вот задача, которую я пытаюсь запустить, где imap_parser - это модуль, который завершает Imaplib и загружает электронные письма в мой 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

Я заметил, что задача на самом деле будет работать с использованием сельдерея, если я не демонризую задачу, используя флаг -detach. Я не знаю, почему задача потерпит неудачу только при запуске как демон. Я попытался установить тот же и тот же пользователь и GroupId с флагами -u и -g, тем же Umask и обеспечением обеспечения пути и рабочих каталогов одинаковы как для демона, так и для не обезедованной версии, но задача все еще не будет выполнять В сельдерее, когда сельдерей работает как демон.

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

Это было полезно?

Решение 2

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

Сельдерея больше не делает собственное отделение по состоянию на 01A8A0E. С ним было слишком много проблем, и, поскольку это работает при отсоединении с использованием Start-Stop-Daemon, Superissord, LaunchD и так далее, вам рекомендуется использовать эти инструменты вместо этого.

Другие советы

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top