глобальные переменные не будут обновляться из цикла asyncio внутри потока - PullRequest
0 голосов
/ 09 октября 2018

Учитывая следующий код:

from collections import deque
import websockets
import threading
import asyncio

# asyncio bugfix where CTRL+C won't exit when run_forever()
import signal
signal.signal(signal.SIGINT, signal.SIG_DFL)


clients = set()
queue = deque()


async def handle_client(client, path):
    try:
        clients.add(client)
        async for buffer in client:
            queue.append(buffer)
            await client.send(buffer)
    finally:
        clients.remove(client)


def start_loop(port):
    loop = asyncio.new_event_loop()
    asyncio.set_event_loop(loop)
    loop.run_until_complete(websockets.serve(handle_client,
                                            host='localhost',
                                            port=port))
    loop.run_forever()


def start(port=1234):
    threading.Thread(target=start, args=(port,)).start()

Позвонив на start() и взаимодействуя с сервером, я ожидал, что смогу получить данные из глобальных переменных queue и clients, но они не кажутся измененными изнутри handle_client().Почему это так?

...