Python 在IsolatedAsyncioTestCase中运行后台任务的首选方法是什么?

Python 在IsolatedAsyncioTestCase中运行后台任务的首选方法是什么?,python,asynchronous,python-asyncio,Python,Asynchronous,Python Asyncio,我正在使用pytest 5.4.3来运行异步单元测试 通常,我喜欢运行一个独立的服务器实例,并与启动的服务器一起执行单元测试用例。目前,我正在尝试执行异步单元测试,运行一个uvicorn服务器实例 在其他任何地方,我都会使用asyncio.gather来并行运行任务,但是asyncSetUp方法强制使用run\u直到完成,如lib/python3.8/unittest/async\u case.py:74中的调用async实现所示 因此,任何长时间运行的任务都会使单元测试在开始时卡住,直到触发键

我正在使用pytest 5.4.3来运行异步单元测试

通常,我喜欢运行一个独立的服务器实例,并与启动的服务器一起执行单元测试用例。目前,我正在尝试执行异步单元测试,运行一个uvicorn服务器实例

在其他任何地方,我都会使用
asyncio.gather
来并行运行任务,但是
asyncSetUp
方法强制使用
run\u直到完成,如
lib/python3.8/unittest/async\u case.py:74中的
调用async
实现所示

因此,任何长时间运行的任务都会使单元测试在开始时卡住,直到触发
键盘中断。实际上,中断会停止服务器实例并继续执行各个测试用例

另一方面,使用
asyncio.create_task
在循环上调度协程会完全冻结进程,需要终止。本例中使用的代码如下所示:

类HttpTestCase(IsolatedAsyncioTestCase):
异步定义异步设置(自):
...
self.task=uvicorn.Server(Server\u config.service())
asyncio.create_任务(self.task)
我还注意到,这取决于长期运行任务的实现。例如,运行
aiocap
服务器实例工作得非常好,因为协同程序将在服务器启动后完成,并在后台处理运行:

class CoapTestCase(IsolatedAsyncioTestCase):
异步定义异步设置(自):
...
self.server=wait aiocap.Context.create_server_Context(…)
异步定义异步拆卸(自):
等待self.server.shutdown()
在后台执行长时间运行的任务并继续进行单元测试的正确方法是什么?在单独的线程/进程中运行服务器始终是一种选择,但我想知道如何使用asyncio来实现这一点。

感谢您的回答。

asyncio.gather()
本身就是一个协同程序,可以用作
运行直到完成()
@ElmoVanKielmo的参数,因为在
asyncSetUp
方法中无法访问执行其余测试用例的任务,所以我认为在这里,收集没有帮助。