Python3 Websockets /多线程问题

时间:2015-02-10 13:50:37

标签: python multithreading python-3.x logging

关于我的申请的一点BG信息:

我正在编写一个应用程序来将数据从python脚本流式传输到webbrowser。我打算使用Python3中的WebSocket模块来传输数据。我正在传输大量数据,我希望能够在用户休闲时启动和停止流式传输。我最初的计划是运行两个python3 websocket服务器。一个用于接收来自网页的命令(" commander"),另一个用于根据收到的命令流式传输数据。然而,这需要一些我不清楚的事情。

1.。)如何在同一个python脚本中运行两个Websocket服务器,见下文

我正在使用Python3 Websockets模块,使用以下代码没有任何问题:

import asyncio
import websockets
import sys
import time
import multiprocessing


@asyncio.coroutine
def commander_start(websocket,path):
    while True:
        command = yield from websocket.recv()
        if command == 'log':
            print("Log Recieved...")
            #Set global variable or queue
        if command == 'stop':
            print("Stop Received...")
            #Set global variable or queue

def run_commander():
    start_commander = websockets.serve(commander_start,'localhost',5001)
    asyncio.get_event_loop().run_until_complete(start_commander)
    asyncio.get_event_loop().run_forever()

@asyncio.coroutine
def logger(websocket,path):
    a = 0
    while True:
        #Check global variable, if not set, then exit
        print("Logger Test: %d" % a)
        a += 1

def run_logger():
    start_logger = websockets.serve(logger,'localhost',5002)
    asyncio.get_event_loop().run_until_complete(start_logger)
    asyncio.get_event_loop().run_forever()

def main():
    commander = multiprocessing.Process(target=run_commander)
    commander.start()

if __name__ == "__main__":
    main()

这完全正常......但是我希望能够同时运行记录器。当我将以下内容添加到main时:

logger_thread = multiprocessing.Logger(target=run_logger)
logger_thread.start()

记录器服务器永远不会启动,我猜测我没有正确理解Python3 Websockets模块的工作方式。

理想情况下,我希望能够启动我的commander_start和logger websockets并在它们之间共享变量。

2.。)如何在这两个线程之间共享信息队列?假设当然我可以在他们自己的线程中运行它们,给出我目前在问题1中解决的约束。)

我不知道从这里去哪里,觉得我碰到了一堵砖墙。

0 个答案:

没有答案