Search code examples
pythonpython-3.xasync-awaitpython-asyncioaiohttp

Shared state with aiohttp web server


My aiohttp webserver uses a global variable that changes over time:

from aiohttp import web    

shared_item = 'bla'

async def handle(request):
    if items['test'] == 'val':
        shared_item = 'doeda'
    print(shared_item)

app = web.Application()
app.router.add_get('/', handle)
web.run_app(app, host='somewhere.com', port=8181)

Results in:

UnboundLocalError: local variable 'shared_item' referenced before assignment

How would I properly use a shared variable shared_item?


Solution

  • Push your shared variable into application's context:

    async def handle(request):
        if items['test'] == 'val':
            request.app['shared_item'] = 'doeda'
        print(request.app['shared_item'])
    
    app = web.Application()
    app['shared_item'] = 'bla'