aio-libs / aio-libs/aiosmtpd

Entire python process stalls when receiving multiple large inbound emails

オープン
#293 コメント 6 件 リアクション 0 件 担当者 0 名 GitHub で見る
主要言語
Python
スター
373
フォーク
105
平均マージ
4分
マージ済み PR(30日)
2

説明

I'd rate this as a critical bug, unless a workaround has already been found (didn't see anything in my reading of the docs),

My `asyncio` process instantiates a `Controller`, then starts it. In the separate thread started by the `Controller` object, `aiosmtpd` opens an inbound port and listens for sessions. So far so good, all pretty normal.

But at times when multiple external clients are simultaneously injecting large-ish (>5MB) messages, the entire python process -- all event loops, all threads -- grinds to a complete halt.

My tests have been to get an external machine to simultaneously inject 10 messages, of 20MB each, into my SMTPD port. I provide my `Controller` object with a null stub `handle_DATA()` hook, which simply returns `"250 Accepted"`.

Every time I run this test, the entire process freezes for between 10.5 and 18 seconds, until the injections are complete.

I'm guessing this is a GIL issue. My "main" thread and `asyncio` event loop freezes, along with everything running within that process.

I'm considering a radical option of spawning a separate `aiosmtpd`-based subprocess, and having its `handle_DATA()` hook throw the received envelopes into a pipeline, where they get pickled then base64'ed and passed via subproc stdout to the parent process.

I truly hope there's a better way. Can anyone please advise a more satisfactory remedy or workaround?

コントリビューションガイド

コントリビューションガイドを開く

評価

この issue はまだ評価されていません。

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。