适用于任何ASGI Web框架的后台任务
项目描述
asgi-background
适用于任何ASGI框架的后台任务。
示例(Starlette)
from asgi_background import BackgroundTaskMiddleware, BackgroundTasks
from starlette.applications import Starlette
from starlette.middleware import Middleware
from starlette.requests import Request
from starlette.responses import Response
from starlette.routing import Route
async def task(num: int) -> None:
await anyio.sleep(1)
print(num)
async def endpoint(request: Request) -> Response:
tasks = BackgroundTasks(request.scope)
await tasks.add_task(task, 1)
return Response()
app = Starlette(
routes=[Route("/", endpoint)],
middleware=[Middleware(BackgroundTaskMiddleware)]
)
执行
与Starlette不同,我们不在ASGI请求/响应周期内执行后台任务。相反,我们将它们安排在绑定到应用程序生命周期的 TaskGroup
中。我们唯一保证的是,后台任务不会阻塞(在异步意义上,而不是全局解释器锁(GIL)意义上)发送响应,当应用程序关闭时,我们会(尝试)等待它们完成。就像Starlette的后台任务一样,您应该只为短生命周期的任务使用这些,它们不是像Redis、Celery等持久队列机制。为了了解背景,Kubernetes中默认的应用程序关闭宽限期为30秒,所以30秒可能是您允许任务运行的最长时间。
项目详情
关闭
asgi_background-0.2.2.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 5046aa0c54690ac980bfe8049b9d3288b352c29d35720397f83be7e825c0f598 |
|
MD5 | 98a43cfe00d2c62b3c426ecdfc2d8301 |
|
BLAKE2b-256 | 4fa6972a433cf7329307e23db2b5f5b6b7ae82a18152e0e83de5fd56857bc240 |
关闭
asgi_background-0.2.2-py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 3d928d74b313fd45ddeeb77272fd7f6edb239cbeee5d0359c4684dca4990ca23 |
|
MD5 | 4d3d0266572c52c0c48607ddb58da55a |
|
BLAKE2b-256 | c6c8302c68d5b00a15eaa6599634d742df392a834af3337c62d0cb0f7440adb2 |