我一直在为这个问题抓狂
有问题的代码是此处开源项目的一部分:aiosmtpd https://github.com/pepoluan/aiosmtpd(我的实际 FOSS 项目的分支,here https://github.com/aio-libs/aiosmtpd)
有问题的文件是这个:main.py https://github.com/pepoluan/aiosmtpd/blob/a0aa0e25bbb013bc03df8b0de98974bfdf67e305/aiosmtpd/main.py
出现问题的那段代码位于main.py 的第 139 行 https://github.com/pepoluan/aiosmtpd/blob/a0aa0e25bbb013bc03df8b0de98974bfdf67e305/aiosmtpd/main.py#L139
这是一个片段:
...
from aiosmtpd.smtp import DATA_SIZE_DEFAULT, SMTP, __version__
...
...
# args is the result of ArgumentParser.parse_args
factory = partial(
SMTP, args.handler,
data_size_limit=args.size, enable_SMTPUTF8=args.smtputf8)
...
server = loop.run_until_complete(
loop.create_server(factory, host=args.host, port=args.port))
...
有时- 那是,不总是-- 代码此时失败了RuntimeError: Event loop stopped before Future completed.
我的问题:
-
可能是什么原因造成的间歇性的失败?
在测试过程中,大约有 10% 的时间会失败(使用 tox + nostest2),但 90% 的时间都进展顺利。
-
我应该如何检测和/或检查和/或断言以防止这种情况发生?
-
“恢复”错误并重做操作的最佳策略是什么?
我第n次强调错误间歇性发生。虽然不常见,但经常发生,所以我觉得有必要追查根本原因。发生错误后,如果我立即或延迟后再次重新运行代码,则几乎总是不会发生相同的错误。