Ошибка SSL Python imaplib с использованием очередей Celeryd
Вопрос
У меня проблема с использованием 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?