У меня проблема с использованием 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, тип select, dat = self._simple_command(имя, почтовый ящик)
Файл "/usr/lib/python2.6/imaplib.py", строка 1059, в _simple_command return self._command_complete(name, self._command(name, *args))
Файл "/usr/lib/python2.6/imaplib.py", строка 889, тип _command_complete, данные = 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 = self.readline()
Файл "/usr/lib/python2.6/imaplib.py", строка 1170, в строке чтения 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:неверный номер версии
Изменить: вот задача, которую я пытаюсь запустить, где 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).