在Websocket服务器外部运行循环

时间:2019-01-16 15:05:01

标签: python python-multiprocessing python-asyncio

我正在尝试做一个简单的设计,即用户向服务器请求一些数据,然后服务器返回一个随机数数组。

我需要一直更改数组,因此我将代码放入了while循环中。现在,我希望循环和服务器同时运行,并且当用户请求数组时,在请求数组时发送该数组的“副本”。

这是我尝试过的:

import asyncio, websockets, json, numpy as np, multiprocessing as mp

result = []

def server():
    print('Server running')
    asyncio.get_event_loop().run_until_complete(websockets.serve(echo, 'localhost', 8765))
    asyncio.get_event_loop().run_forever()

async def echo(websocket, path):
    async for message in websocket:
        msg_in = json.loads(message) # Converts JSON string to dictionary.
        if msg_in['instr']=="request_data":
            print(result)
            msg_out={'data': str(result)}
            await websocket.send(msg_out['data'])

def randomLoop():
    print('Loop running')
    while True:
        result_array = np.rint(100*np.random.rand(3))
        result = result_array.tolist()

serverThread = mp.Process(target=server)
loopThread = mp.Process(target=randomLoop)

serverThread.start()
loopThread.start()

serverThread.join()
loopThread.join()

这是我之前的代码(没有循环):

import asyncio, websockets, json

result = [1,2,3]

async def echo(websocket, path):
    async for message in websocket:
        msg_in = json.loads(message) # Converts JSON string to dictionary.
        if msg_in['instr']=="request_data":
            print(result)
            msg_out={'data': str(result)}
            await websocket.send(msg_out['data'])


asyncio.get_event_loop().run_until_complete(websockets.serve(echo, 'localhost', 8765))
asyncio.get_event_loop().run_forever()

while循环之前的代码运行良好,现在我不知道该怎么办。我也不知道多处理的工作原理,我只是在尝试。

0 个答案:

没有答案