Module mirai.tasks
此模块提供了管理多个异步任务的一种方式。
Expand source code
# -*- coding: utf-8 -*-
"""
此模块提供了管理多个异步任务的一种方式。
"""
import asyncio
from typing import Set
class Tasks:
"""管理多个异步任务的类。"""
def __init__(self):
self._tasks: Set[asyncio.Task] = set()
def _done_callback(self, task):
# 完成时,移除任务。
self._tasks.remove(task)
def create_task(self, coro) -> asyncio.Task:
"""创建一个异步任务。
Args:
coro: 异步任务的coroutine。
Returns:
asyncio.Task: 创建的任务。
"""
task = asyncio.create_task(coro)
self._tasks.add(task)
task.add_done_callback(self._done_callback)
return task
def __iter__(self):
"""迭代可得到的任务。"""
yield from self._tasks
@staticmethod
async def cancel(task: asyncio.Task):
"""取消一个任务。此方法会等待到任务取消成功。
Args:
task: 任务。
"""
task.cancel()
try:
await task
except asyncio.CancelledError:
pass
async def cancel_all(self):
"""取消所有任务。此方法会等待到所有任务取消成功。"""
for task in list(self._tasks):
await self.cancel(task)
Classes
class Tasks
-
管理多个异步任务的类。
Expand source code
class Tasks: """管理多个异步任务的类。""" def __init__(self): self._tasks: Set[asyncio.Task] = set() def _done_callback(self, task): # 完成时,移除任务。 self._tasks.remove(task) def create_task(self, coro) -> asyncio.Task: """创建一个异步任务。 Args: coro: 异步任务的coroutine。 Returns: asyncio.Task: 创建的任务。 """ task = asyncio.create_task(coro) self._tasks.add(task) task.add_done_callback(self._done_callback) return task def __iter__(self): """迭代可得到的任务。""" yield from self._tasks @staticmethod async def cancel(task: asyncio.Task): """取消一个任务。此方法会等待到任务取消成功。 Args: task: 任务。 """ task.cancel() try: await task except asyncio.CancelledError: pass async def cancel_all(self): """取消所有任务。此方法会等待到所有任务取消成功。""" for task in list(self._tasks): await self.cancel(task)
Static methods
async def cancel(task: _asyncio.Task)
-
取消一个任务。此方法会等待到任务取消成功。
Args
task
- 任务。
Expand source code
@staticmethod async def cancel(task: asyncio.Task): """取消一个任务。此方法会等待到任务取消成功。 Args: task: 任务。 """ task.cancel() try: await task except asyncio.CancelledError: pass
Methods
async def cancel_all(self)
-
取消所有任务。此方法会等待到所有任务取消成功。
Expand source code
async def cancel_all(self): """取消所有任务。此方法会等待到所有任务取消成功。""" for task in list(self._tasks): await self.cancel(task)
def create_task(self, coro) ‑> _asyncio.Task
-
创建一个异步任务。
Args
coro
- 异步任务的coroutine。
Returns
asyncio.Task
- 创建的任务。
Expand source code
def create_task(self, coro) -> asyncio.Task: """创建一个异步任务。 Args: coro: 异步任务的coroutine。 Returns: asyncio.Task: 创建的任务。 """ task = asyncio.create_task(coro) self._tasks.add(task) task.add_done_callback(self._done_callback) return task