У меня проблема с использованием 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).