How to send message from the child process to websocket-client in Tornado?

╄→гoц情女王★ 提交于 2019-12-07 20:18:50

问题


I have the Tornado server. It receives messages from websocket-connections. I need to run the worker function as a separate process and the worker should answer to client. The main idea is to work in a parallel mode. Something like this

def worker(ws,message):
    input = json.loads(message)
    t = input["time"]
    time.sleep(t)
    ws.write_message("Hello, World!"*int(t))

class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.render('index.html')

class WebSocket(tornado.websocket.WebSocketHandler):
    def check_origin(self, origin):
        return True

    def open(self):
        print("WebSocket opened")
        self.application.webSocketsPool.append(self)

    def on_message(self, message):
        for key, value in enumerate(self.application.webSocketsPool):
            if value == self:
                p = Process(target=worker, args=(value.ws_connection,message,))
                p.start()

    def on_close(self):
        print("WebSocket closed")
        for key, value in enumerate(self.application.webSocketsPool):
            if value == self:
                del self.application.webSocketsPool[key]

Of course, this doesn't work because of pickling error. How to solve this problem?

来源:https://stackoverflow.com/questions/37013515/how-to-send-message-from-the-child-process-to-websocket-client-in-tornado

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!