Skip to main content

Convert WSGI app to ASGI app or ASGI app to WSGI app.

Project description

a2wsgi

Convert WSGI app to ASGI app or ASGI app to WSGI app.

Pure Python. Only depend on the standard library.

Compared with other converters, the advantage is that a2wsgi will not accumulate the requested content or response content in the memory, so you don't have to worry about the memory limit caused by a2wsgi. This problem exists in converters implemented by uvicorn/startlette or hypercorn.

Install

pip install a2wsgi

How to use

WSGIMiddleware

Convert WSGI app to ASGI app:

from a2wsgi import WSGIMiddleware

ASGI_APP = WSGIMiddleware(WSGI_APP)

WSGIMiddleware executes WSGI applications with a thread pool of up to 10 threads by default. If you want to increase or decrease this number, just like WSGIMiddleware(..., workers=15).

WSGIMiddleware utilizes a queue to direct traffic from the WSGI App to the client. To adjust the queue size, simply specify the send_queue_size parameter (default to 10) during initialization, like so: WSGIMiddleware(..., send_queue_size=15). This enable developers to balance memory usage and application responsiveness.

ASGIMiddleware

Convert ASGI app to WSGI app:

from a2wsgi import ASGIMiddleware

WSGI_APP = ASGIMiddleware(ASGI_APP)

ASGIMiddleware will wait for the ASGI application's Background Task to complete before returning the last null byte. But sometimes you may not want to wait indefinitely for the execution of the Background Task of the ASGI application, then you only need to give the parameter ASGIMiddleware(..., wait_time=5.0), after the time exceeds, the ASGI task corresponding to the request will be tried to cancel, and the last null byte will be returned.

You can also specify your own event loop through the loop parameter instead of the default event loop. Like ASGIMiddleware(..., loop=faster_loop)

Access the original Scope/Environ

Sometimes you may need to access the original WSGI Environ in the ASGI application, just use scope["wsgi_environ"]; it is also easy to access the ASGI Scope in the WSGI Application, use environ["asgi.scope"].

Benchmark

Run pytest ./benchmark.py -s to compare the performance of a2wsgi and uvicorn.middleware.wsgi.WSGIMiddleware / asgiref.wsgi.WsgiToAsgi.

Why a2wsgi

Convert WSGI app to ASGI app

You can convert an existing WSGI project to an ASGI project to make it easier to migrate from WSGI applications to ASGI applications.

Convert ASGI app to WSGI app

There is a lot of support for WSGI. Converting ASGI to WSGI, you will be able to use many existing services to deploy ASGI applications.

Compatibility list

This list quickly demonstrates the compatibility of some common frameworks for users who are unfamiliar with the WSGI and ASGI protocols.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

a2wsgi-1.10.9.tar.gz (18.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

a2wsgi-1.10.9-py3-none-any.whl (17.4 kB view details)

Uploaded Python 3

File details

Details for the file a2wsgi-1.10.9.tar.gz.

File metadata

  • Download URL: a2wsgi-1.10.9.tar.gz
  • Upload date:
  • Size: 18.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: pdm/2.20.1 CPython/3.10.18 Linux/6.11.0-1015-azure

File hashes

Hashes for a2wsgi-1.10.9.tar.gz
Algorithm Hash digest
SHA256 7ca30b71c69b688c3a19b911be5bc78506e1b7507768951ed7ed010e7b2164af
MD5 349573dec5f294c24c44d8e00d200de4
BLAKE2b-256 3be6cde8b3e505d9a40cbbd94308d3317f3e022bcd627bacf412a0e6ba47dd91

See more details on using hashes here.

File details

Details for the file a2wsgi-1.10.9-py3-none-any.whl.

File metadata

  • Download URL: a2wsgi-1.10.9-py3-none-any.whl
  • Upload date:
  • Size: 17.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: pdm/2.20.1 CPython/3.10.18 Linux/6.11.0-1015-azure

File hashes

Hashes for a2wsgi-1.10.9-py3-none-any.whl
Algorithm Hash digest
SHA256 fe4ca66b7c45c350374e46f1233468e9358432c62c1c465eda9b3864287be92d
MD5 8e93db0d6116d6cf6cbe1b62b3483ab6
BLAKE2b-256 5ee9c7d9adcfd5a6028f2588f618834e69eebae97bceaa8b0bc654d33f7e0088

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page