Anonymous
Ну ведь в закрепе написано о чатике
Ingli
Alex
Заэвейтил fetch_page ничего не поменялось
Tishka17
Блин
Tishka17
Сразу в бан. Это бот
Послушаешь вас
Anonymous
Вижу два варианта: 1. Объекты запоминают что с ними делали и умеют объединять похожие изменения 2. Объекты запоминают старое состояние (которое прочитали из базы) и сравнивают текущее с ним
Хм. Первый вариант кажется лучше. Но проблема в объединение похожих изменений. Думаю разбить запрос на части и если ячейка модифицируется много раз, то делать последнее изменение этой ячейки
Tishka17
Всё поля при чём
Alex
content = loop.run_until_complete(await fetch_page(session, 'https://example.com/test'))
Alex
Или я не туда втулил Эвейт ?
Tishka17
Tishka17
Не надо так
Tishka17
Тебе луп нужен только если ты не хочешь ждать результат выполнения, тогда туда кидаешь таск и всё
Alex
Конкретнее, что и где убрать ?
Alex
Сложно понять
Tishka17
Конкретнее, что и где убрать ?
Просто content = await fetch...
Alex
content = await fetch_page(session, 'https://www.example.com/test')
Alex
результат тот же Unclosed client session client_session: <aiohttp.client.ClientSession object at 0x0000000003C2A5F8>
Alex
Я так понял ошибка происходит в этом месте : with aiohttp.ClientSession(loop=loop) as session:
Alex
Так как до этой строчки оператор принт работает, а уже после неё нет
Alex
async with перестало работать вообще
Tishka17
Перестало? Как проявляется?
Alex
Ни ошибок, ни принта с контентом
Tishka17
Попробуй убрать явную передачу лупа в сессию
Tishka17
Хотя наверно без разницы
Tishka17
Ни ошибок, ни принта с контентом
А сайт вообще доступен?
Alex
да
Alex
import websocket import requests import time import asyncio import aiohttp async def fetch_page(session, url): with aiohttp.Timeout(10): async with session.get(url) as response: assert response.status == 200 return await response.read() def on_message(ws, message): start_time = time.time() print("WSS: ",ws) #async def go(): #task2 = asyncio.create_task(https_run()) #await asyncio.gather(task2) #asyncio.run(go()) async def go_https(): loop = asyncio.get_event_loop() #print("https ",loop) async with aiohttp.ClientSession(loop=loop) as session: content = await fetch_page(session, 'https://www.example.com/test') print("https ",content) loop.close() #session.close() #go_https() asyncio.run(go_https()) print("--- %s seconds ---" % (time.time() - start_time)) def on_error(ws, error): print(error) def on_close(ws): print("### closed ###") def on_open(ws): print("### connected ###") if name == "main": ws = websocket.WebSocketApp("wss://www.example.com/test", on_message = on_message, on_error = on_error, on_close = on_close) ws.on_open = on_open ws.run_forever()
Tishka17
Зачем loop.close?
Alex
Оно не влияет что с ним что без
Tishka17
Убери из go_http вообще работу с лупом
Alex
Закоментировал #loop = asyncio.get_event_loop()
Alex
а тут как ? :
Alex
async with aiohttp.ClientSession(loop=loop) as session:
Alex
,
Alex
?
Alex
async def go_https(): #loop = asyncio.get_event_loop() #print("https ",loop) #async with aiohttp.ClientSession(loop=loop) as session: content = await fetch_page(session, 'https://www.binance.com/api/v1/depth?symbol=BTCUSDT&limit=1000') print("https ",content) #loop.close() #session.close() #go_https()
Kop
А кошельков около тысячи. Когда было меньше 500 или до 100 все ещё хоть куда-то шло и работало
Alex
session то пустая ?
Alex
Worlak2, арбитражиш ? ;)
Alex
Как это сделать ?
Alex
уже путаница пошл
Tishka17
Как это сделать ?
https://docs.aiohttp.org/en/stable/client_reference.html как тут
Tishka17
Вообще, похоже сессию надо один раз создать
Tishka17
И потом везде юзать
Anonymous
Што ты там на андройде отлаживаешь
Anonymous
А через что?
Anonymous
Pydroid
Почему именно это? Другое пробовал што?
Tishka17
Хз, он работает
Tishka17
что-то другое пробовал - криво как-то
Bulat
Ребята всем привет. как это понять: re.findall(r"((?:\d{3}|\(\d{3}\))?(?:\s|-|\.)?\d{3}(?:\s|-|\.)\d{4})",s) он ищет (произвольный знак) + три цифры + три цифры .... вообще не понимаю
Bulat
не серьезно
Alex
Конструкция завелась
Alex
async def fetch(client): async with client.get('https://www.binance.com/api/v1/depth?symbol=BTCUSDT&limit=1000') as resp: assert resp.status == 200 return await resp.text() def on_message(ws, message): start_time = time.time() print("WSS: ",ws) async def go_https(): async with aiohttp.ClientSession() as client: html = await fetch(client) print("HTTPS: ") asyncio.run(go_https())
Alex
Но
Alex
WSS: <websocket._app.WebSocketApp object at 0x00000000024FBF28> HTTPS: --- 0.40702342987060547 seconds ---
Tishka17
а html?
Alex
Выполняется оно за 0,44 секунды ровно так же как и в линейном режиме!
Alex
html переменная с содержимым
Alex
все с ней впорядке
Alex
Код выполняется так же долго как тупо через реквестс делать
Alex
я в шоке столько ебли и результат 0
Tishka17
Выполняется оно за 0,44 секунды ровно так же как и в линейном режиме!
разница в том, что http у тебя пишется теперь независимо от работы вебсокета
Tishka17
наверно
Tishka17
хотя хз в каком потоке луп работает
Kirill
я в шоке столько ебли и результат 0
А чего ты ожидал с такой писаниной? Ты в синхронной функции on_message() запускаешь луп и ждёшь пока выполнится один HTTP запрос, после чего вырубаешь луп и выходишь из on_message(). В каком месте тут должно стать быстрее, где тут параллельность?
Tishka17
надо асинхзронные вебсокеты взять
Kop
Worlak2, арбитражиш ? ;)
Нет, слежу за изменением балансов, чтоб уведомить клиента