Python Sanic或异步框架使用Asgiref的原因?

Python Sanic或异步框架使用Asgiref的原因?,python,python-asyncio,sanic,Python,Python Asyncio,Sanic,我知道答案是“始终取决于”,但一般来说,在Sanic这样的异步框架中使用asgiref包装器是有原因的 我的主要问题是,为什么会有人在异步框架中使用它,我了解Django的使用情况,但是如果你仔细考虑了异步编程,那么像这样的东西似乎是一种处理问题的懒惰方式 告诉我我错了 我对asgiref不太熟悉。然而,尽管如此,我还是很熟悉asgi的概念,它可以替代wsgi 就Sanic而言,这有点无关紧要,而且它可以开箱即用地异步运行 我不想告诉你你本身是错的,但我看不出它在Sanic世界有什么用处。我

我知道答案是“始终取决于”,但一般来说,在Sanic这样的异步框架中使用asgiref包装器是有原因的

我的主要问题是,为什么会有人在异步框架中使用它,我了解Django的使用情况,但是如果你仔细考虑了异步编程,那么像这样的东西似乎是一种处理问题的懒惰方式


告诉我我错了

我对asgiref不太熟悉。然而,尽管如此,我还是很熟悉asgi的概念,它可以替代wsgi

就Sanic而言,这有点无关紧要,而且它可以开箱即用地异步运行


我不想告诉你你本身是错的,但我看不出它在Sanic世界有什么用处。

我对asgiref不太熟悉。然而,尽管如此,我还是很熟悉asgi的概念,它可以替代wsgi

就Sanic而言,这有点无关紧要,而且它可以开箱即用地异步运行

我不想告诉你你本身是错的,但我看不出它在Sanic世界有什么用处。

首先,背景:

一些异步IO框架,例如
sanic
aiohttp
早于ASGI成熟的时间,因为它们适合作为异步IO服务器/应用程序接口

因此,他们的代码库中已经内置了Web服务器实现。他们可以改用ASGI作为接口,而不是自己的内部接口,但这对他们的维护人员来说意味着一大堆工作

那么,为什么值得这么做呢

如果他们这样做的话,他们会得到的好处是:

  • 能够在一系列不同的服务器实现下运行。(他们自己的实现,或者任何
    uvicorn
    hypercorn
    daphne
    服务器)能够透明地在服务器实现之间切换,提供了一个更强大的生态系统,这意味着服务器实现可以跨框架共享。Sanic将获得具有HTTP/2支持、Windows支持和PyPy支持的服务器实现,并解决其在套接字流控制方面存在的一些未决问题
  • 能够从共享中间件和其他工具中获益。能够编写跨任何ASGI框架工作的中间件有助于整个生态系统。您可以编写调试中间件、静态文件服务、测试客户端等。。。它可以与任何ASGI框架一起工作,而不必为每个框架构建新的东西
  • 较低的复杂性。有一个完全设计和独立的服务器/应用程序接口有助于减少开发人员在查看应用程序框架内部时需要考虑的表面积,因为这意味着在服务器代码和应用程序代码之间有一个很好的文档边界。
  • 可组合。因为ASGI是一个可组合的接口,所以可以以有用的方式组合它。例如,在同一个Web服务器上为两个不同的Sanic应用程序提供服务
简言之,ASGI的好处与WSGI的好处相同。对于sanic来说,这比现在任何编写新的asyncio框架的人都要少,因为他们已经完成了编写服务器实现的所有繁重工作,但是他们仍然可以从中获得好处,这对整个社区来说绝对是一个胜利

相关:

(还要注意的是,
asgiref
只是一个Python软件包,其中包含一些用于使用ASGI框架的帮助,这也恰好是保存ASGI规范文档的repo。问题实际上是关于将ASGI用于Sanic,而不是使用
asgiref

首先,背景:

一些异步IO框架,例如
sanic
aiohttp
早于ASGI成熟的时间,因为它们适合作为异步IO服务器/应用程序接口

因此,他们的代码库中已经内置了Web服务器实现。他们可以改用ASGI作为接口,而不是自己的内部接口,但这对他们的维护人员来说意味着一大堆工作

那么,为什么值得这么做呢

如果他们这样做的话,他们会得到的好处是:

  • 能够在一系列不同的服务器实现下运行。(他们自己的实现,或者任何
    uvicorn
    hypercorn
    daphne
    服务器)能够透明地在服务器实现之间切换,提供了一个更强大的生态系统,这意味着服务器实现可以跨框架共享。Sanic将获得具有HTTP/2支持、Windows支持和PyPy支持的服务器实现,并解决其在套接字流控制方面存在的一些未决问题
  • 能够从共享中间件和其他工具中获益。能够编写跨任何ASGI框架工作的中间件有助于整个生态系统。您可以编写调试中间件、静态文件服务、测试客户端等。。。它可以与任何ASGI框架一起工作,而不必为每个框架构建新的东西
  • 较低的复杂性。有一个完全设计和独立的服务器/应用程序接口有助于减少开发人员在查看应用程序框架内部时需要考虑的表面积,因为这意味着在服务器代码和应用程序代码之间有一个很好的文档边界。
  • 可组合。因为ASGI是一个可组合的接口,所以可以以有用的方式组合它。例如,在同一个Web服务器上为两个不同的Sanic应用程序提供服务
简言之,ASGI的好处与WSGI的好处相同。对sanic来说,这并不是一场胜利,而对任何一个写文章的人来说都是如此