间歇性"Event loop stopped before Future completed."



在这个问题上我一直在流泪

有问题的代码是一个开源项目的一部分:aiosmtpd(我的FOSS项目的分支,在这里(

有问题的文件是这样的:main.py

发生问题的代码位于main.py 的第139行

这里有一个片段:

...
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.时失败

我的问题:

  1. 间歇性故障的原因是什么?

    在测试期间,它有10%的时间失败(使用tox+nosetest2(,但90%的时间进展顺利。

  2. 我应该如何仪表和/或检查和/或断言以防止这种情况发生?

  3. 什么是";回收";错误并重新执行操作?


我将第n次强调,错误间歇性发生。偶尔,但经常,所以我觉得有必要追查根本原因。在出现错误之后,如果我再次运行代码——立即或延迟之后——几乎总是不会发生同样的错误。

除非asyncio中有错误,否则问题很可能是由隐藏在代码库中的对loop.stop()的调用引起的。您可能想要删除或禁用这些,因为它们与run_until_complete以及更现代的asyncio.run根本不兼容。