Выполнить цикл вне сервера веб-сокетов - PullRequest
0 голосов
/ 16 января 2019

Я пытаюсь создать небольшой проект, где пользователь запрашивает некоторые данные на сервере, а затем сервер возвращает массив случайных чисел.

Мне нужно все время менять массив, поэтому я поместил код в цикл 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 работал отлично, теперь я не знаю, что делать. Я также не знаю, как работает многопроцессорность, я просто пытался.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...