CeleryDキューを使用したPython Imaplib SSLエラー
質問
Python 2.6で最新のDjango SVNを使用してImaplibを使用するのに問題があります。キュー(Celerydを使用)にIMAPメールをダウンロードしたい。コマンドラインから電子メールを接続/ダウンロードすることができますが、djangoを介してタスクをセレリドにオフロードすると、このエラーが得られます: "sslerror:[errno 1] _ssl.c:1325:エラー:1408f10b:sslルーチン:ssl3_get_record :間違ったバージョン番号」。
iMaplib docsは、SSLのバージョンを指定する方法については言及していません。 Gmailから電子メールを引き出しようとしています。セレリドを使用してタスクをキューにオフロードすると、タスクが失敗する理由がわかりません。どんな助けも大歓迎です。
編集:ここにスタックトレースがあります:
ファイル "/usr/lib/python2.6/imaplib.py"、line 643、in select typ、dat = self._simple_command(name、mailbox)
file "/usr/lib/python2.6/imaplib.py"、行1059、_simple_command return self._command_complete(name、self._command(name、 *args))
file "/usr/lib/python2.6/imaplib.py"、行889、_command_complete typ、data = self._get_tagged_response(tag)
file "/usr/lib/python2.6/imaplib.py"、行990、_get_tagged_response self._get_response()
ファイル "/usr/lib/python2.6/imaplib.py"、line 907、in _get_response resp = self._get_line()
ファイル "/usr/lib/python2.6/imaplib.py"、line 1000、_get_line line = self.readline()
file "/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:間違ったバージョン番号
編集:私が実行しようとしているタスクは次のとおりです。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フラグを使用してタスクをデイカ化しない限り、タスクが実際にセロリを使用して実行されることに気付きました。デーモンとして実行されたときだけタスクが失敗する理由はわかりません。 -Uと-Gのフラグ、同じUmaskで同じユーザーIDとGroupIDを設定してみましたが、パスとワーキングディレクトリがデーモンと非デイモニア化バージョンの両方で同じであることを確認しましたが、タスクは実行されません。セロリがデーモンとして走っているとき。
セロリの最新バージョン(0.9.4)を使用しています。
解決 2
セレリドの作成者によると:
セロリは、01A8A0Eの時点で独自の分離を行いなくなりました。それにはあまりにも多くの問題があり、Start-Stop-Daemon、Supervisord、LaunchDなどを使用して分離するときに機能するため、代わりにそれらのツールを使用することをお勧めします。
他のヒント
セロリワーカー内で走ったときにのみ壊れた場合、AMQPlib(SSLモジュールを使用する)を使用したり、マルチプロセッシングとフォーキング(生存していないフォークの前に初期化されたグローバル変数)がある可能性があります。
実行しようとしているタスクを含めていただけますか?タスク自体内のサーバーに接続しますか、それとも共有オブジェクトの種類ですか?
TLSを話していないポートに接続しています。 TLS/SSL対応のメールサーバーと話をしようとしていますか、それともCeleryがAMQP接続にTLSを使用しようとしていますか?