使用celeryd队列的python imaplib ssl错误

使用celeryd队列的python imaplib ssl错误,python,django,celery,Python,Django,Celery,我在Python2.6和最新的django svn上使用imaplib时遇到问题。我想在队列中下载imap电子邮件(使用celeryd)。我可以从命令行连接/下载电子邮件,但当我通过django将任务卸载到celeryd时,我会收到以下错误:“SSLError:[Errno 1]\u ssl.c:1325:error:1408F10B:ssl例程:SSL3\u get\u记录:错误的版本号” Imaplib文档没有提到如何指定SSL的版本。我正试图从gmail中提取电子邮件。我不明白为什么使用c

我在Python2.6和最新的django svn上使用imaplib时遇到问题。我想在队列中下载imap电子邮件(使用celeryd)。我可以从命令行连接/下载电子邮件,但当我通过django将任务卸载到celeryd时,我会收到以下错误:“SSLError:[Errno 1]\u ssl.c:1325:error:1408F10B:ssl例程:SSL3\u get\u记录:错误的版本号”

Imaplib文档没有提到如何指定SSL的版本。我正试图从gmail中提取电子邮件。我不明白为什么使用celeryd将任务卸载到队列会导致任务失败。任何帮助都将不胜感激

编辑:以下是堆栈跟踪:

文件“/usr/lib/python2.6/imaplib.py”,第643行,选择 典型,dat=self.\u简单\u命令(名称,邮箱)

文件“/usr/lib/python2.6/imaplib.py”,第1059行,在_simple_命令中 返回self.\u命令\u complete(名称,self.\u命令(名称,*args))

文件“/usr/lib/python2.6/imaplib.py”,第889行,在命令中完成 类型,数据=自身。\获取\标记\响应(标记)

文件“/usr/lib/python2.6/imaplib.py”,第990行,在响应中 self.\u获取\u响应()

文件“/usr/lib/python2.6/imaplib.py”,第907行,在get响应中 resp=self.\u get\u line()

文件“/usr/lib/python2.6/imaplib.py”,第1000行,在 line=self.readline()

文件“/usr/lib/python2.6/imaplib.py”,第1170行,在readline中 char=self.sslobj.read(1)

文件“/usr/lib/python2.6/ssl.py”,第136行,已读 返回self.\u sslobj.read(len)

SSLError:[Errno 1]\u ssl.c:1325:error:1408F10B:ssl例程:SSL3\u GET\u记录:版本号错误

编辑:这是我试图运行的任务,其中imap_解析器是一个模块,它包装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标志设置相同的userid和groupid,使用相同的umask,并确保守护程序和非守护程序版本的路径和工作目录相同,但当芹菜作为守护程序运行时,任务仍不会在芹菜中运行


我正在使用最新版本的Cellery(0.9.4)。

您连接到的端口不使用TLS。您是在尝试与启用TLS/SSL的邮件服务器通话,还是Cellery正在尝试使用TLS进行AMQP连接?

如果它仅在Cellery worker内部运行时中断,amqplib(使用SSL模块)可能有问题或者它可能是具有多处理和fork(在fork之前初始化的一个全局变量,该变量不再处于活动状态)

请将您正在尝试运行的任务包括在内,好吗?
您是连接到任务本身内部的服务器,还是它是某种共享对象?

根据celeryd的创建者:


芹菜从01a8a0e开始不再自行分离。它有太多的问题,而且由于它在使用启动-停止守护程序、supervisord、launchd等进行分离时工作,因此建议您改用这些工具。

它是一个支持SSL的邮件服务器(gmail)您正在使用gmail文档中指定的端口993进行连接,并且还使用了
IMAP4_SSL
?是的,看起来这是imaplib用于SSL的默认端口(通常是常用的imap SSL端口)。也使用IMAP4_SSL。。它完全在命令行上工作,但当我使用相同的参数将任务卸载到队列时,它会失败。无故障芹菜正在丢失主机和端口等参数。当它将任务卸载时,我不知所措,抱歉。祝你好运。此外,可能imaplib不是线程/分叉安全的,并且有连接缓存或类似的n您可能必须找到它,并在任务启动时将其清除。嘿,asksol,谢谢您的回答。我为上面的问题添加了更多信息,包括我正在运行的任务。此外,我注意到任务将在芹菜中运行,除非芹菜作为带--detach标志的守护进程运行。有什么想法吗?