Тема: asyncio - як тепер (в 3.10) з ним працювати? Старі приклади - всьо.
З версії 3.10 по викидали депрікейти, які давно хотіли.
run_until_complete, на приклад - вже нормально не працює... Старі приклади, що є у цих наших інтернетах - більшою частиною вже не актуальні.
Є бажання для тестів створити вебсокетний сервер. Намагаюсь щось зробити по прикладах - валиться куча помилок. Гуглю - це через перехід на 3.10
Відкатити назад - не хочу.
тому питання:
Э старий приклад
import asyncio
import websockets
import logging, sys #... і ще там що треба
hostport = "12345"
cip=""#потім з'ясовується реальний IP, який підставляється актуальний. Десь там, воно працює.
class Serverws:
clients=set()
async def register(self, ws :WebSocketServerProtocol) -> None:
self.clients.add(ws)
async def unregister(self, ws: WebSocketServerProtocol) -> None:
self.clients.remove(ws)
async def send_to_clients(self, message: str) -> None:
if self.clients:
await asyncio.wait([client.send(message) for client in self.clients])
async def ws_handler(self, ws: WebSocketServerProtocol, uri: str) -> None:
await self.register(ws)
try:
await self.distribute(ws)
finally:
await self.unregister(ws)
async def distribute(self, ws: WebSocketServerProtocol) -> None:
async for message in ws:
await self.send_to_clients(message)
# і от раніше там було таке:
serverr = Serverws()
start_server = websockets.serve(serverr.ws_handler,cip,hostport)
asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()
По перше, run_until_complete - зараз робити нетреба, а треба робити .run
Так от, в такому вигляді - воно як було - вже нормально не працює:
webs_srv.py:88: DeprecationWarning: There is no current event loop
asyncio.get_event_loop().run_forever()
і потім при спробі конекту - конектить клієнта. але якщо клієнт відішле повідомлення - ніфіга не трапляється взагалі. а повинно роздати месседж усім клієнтам, що наявні.
Як зараз коректно запускати асинхронно отаке на базі класу?
На скільки я розумію - якщо я розвалю це на окремі функції - проблем буде менше. Але, не хотілося б.
P.S. чи, може, там в коді помилка? бо приклад не мій, я на його базі намагаюсь зрозуміти як це робити.