在这个问题上我一直在流泪
有问题的代码是一个开源项目的一部分: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.
时失败
我的问题:
此间歇性故障的原因是什么?
在测试期间,它有10%的时间失败(使用tox+nosetest2(,但90%的时间进展顺利。
我应该如何仪表和/或检查和/或断言以防止这种情况发生?
什么是";回收";错误并重新执行操作?
我将第n次强调,错误间歇性发生。偶尔,但经常,所以我觉得有必要追查根本原因。在出现错误之后,如果我再次运行代码——立即或延迟之后——几乎总是不会发生同样的错误。
除非asyncio中有错误,否则问题很可能是由隐藏在代码库中的对loop.stop()
的调用引起的。您可能想要删除或禁用这些,因为它们与run_until_complete
以及更现代的asyncio.run
根本不兼容。