GG_Python
GG_Python

Reputation: 3541

Setting and Getting Variables within an imported Class

All, I'm implementing websockets using flask/uWSGI. This is relegated to a module that's instantiated in the main application. Redacted code for the server and module:

main.py

from WSModule import WSModule
app = Flask(__name__)
wsmodule = WSModule()
websock = WebSocket(app)

@websock.route('/websocket')
def echo(ws):
    wsmodule.register(ws)
    print("websock clients", wsmodule.clients)    
    while True: # This while loop is related to the uWSGI websocket implementation
        msg = ws.receive()
        if msg is not None:
            ws.send(msg)
        else: return

@app.before_request
def before_request():
    print ("app clients:",wsmodule.clients)

and WSModule.py:

class WSModule(object):

    def __init__(self):
        self.clients = list()

    def register(self, client):
        self.clients.append(client) 

Problem: When a user connects using websockets (into the '/websocket' route), the wsmodule.register appends their connection socket, this works fine- printout 'websocket clients' shows the appended connection. The issue is that I can't access those sockets from the main application. This is seen by the 'app clients' printout which never updates (list stays empty). Something is clearly updating, but how to access those changes?

Upvotes: 1

Views: 41

Answers (1)

Ethan Furman
Ethan Furman

Reputation: 69031

It sounds like your program is being run with either threads or processes, and a wsmodule exists for each thread/process that is running.

So one wsmodule is being updated with the client info, while a different one is being asked for clients... but the one being asked is still empty.

If you are using threads, check out thread local storage.

Upvotes: 1

Related Questions