МишанЯ
Привет, ребят. У меня такая ситуация. Работаю с апи вконтакте прямыми запросами requests. Отслеживаю сообщения в адрес сообщества, обрабатывают их. По началу как делал, жду сообщений, получил, обработал, снова лонгполл. Бот должен держать поток человек хотябы в 50 рыл. Но такая конструкция ждала смс, обрабатывалась, снова ждала...Решил использовать threading . Так же лонгполл ожидал смс, как только получаю, то ставлю на поток его обработку, а сам заново лонгполл. Но люди пишут, сколько смс, столько и потоков их обрабатывают. Мой комп да, а вот vps то одноядерный. И да, такая конструкция иногда теряет сообщения. Я к вам за советом, как мне лучше решить мою задачу? Чтобы не упускать лонгполл запрос на новые поступления сообщения и обрабатывать их независимо от этого.
МишанЯ
Я уже подумал сразу запускать лонгполл и поток обработки сообщений, который будет доставать из массива какого нибудь response ответ от лонгполл и обрабатывать его. А сам запрос лонгполл будет класть туда свои ответы и заново делать запрос.
🍁 Jaŭhien
А чего либу не возьмешь?
Sergey
Привет, ребят. У меня такая ситуация. Работаю с апи вконтакте прямыми запросами requests. Отслеживаю сообщения в адрес сообщества, обрабатывают их. По началу как делал, жду сообщений, получил, обработал, снова лонгполл. Бот должен держать поток человек хотябы в 50 рыл. Но такая конструкция ждала смс, обрабатывалась, снова ждала...Решил использовать threading . Так же лонгполл ожидал смс, как только получаю, то ставлю на поток его обработку, а сам заново лонгполл. Но люди пишут, сколько смс, столько и потоков их обрабатывают. Мой комп да, а вот vps то одноядерный. И да, такая конструкция иногда теряет сообщения. Я к вам за советом, как мне лучше решить мою задачу? Чтобы не упускать лонгполл запрос на новые поступления сообщения и обрабатывать их независимо от этого.
В случае threads нет разницы, одно ядро или нет, потому что треды всё равно выполняются в рамках 1 ядра.
МишанЯ
Т.о. будет только 1 поток паралецно работать. Но я не знаю. В парал не очень силён вообще. Только threafing и знаю как запускать поток...все
Sergey
да, но в этом ничего страшного, ибо основная миссия потоков в твоем случае - ждать.
МишанЯ
А чего либу не возьмешь?
А либа асинхронно работает?
🍁 Jaŭhien
🍁 Jaŭhien
Если с телегой работаешь - то aiogram асинхронный
МишанЯ
А я дмаю что не асинхронно а последовательно. И наврятли она может отправлять сообщения сразу несколькольким людям...
🍁 Jaŭhien
А, вконтакте
Sergey
50 человек легко треды выдержат. Если будет увеличение, стоит смотреть в сторону асинхронности
МишанЯ
да, но в этом ничего страшного, ибо основная миссия потоков в твоем случае - ждать.
Ждать не долго. Не очень хорошо, если пропущу обновление.
🍁 Jaŭhien
Ну в общем, ты можешь принимать одним потоком сообщения и складывать их в очередь, из которой эти сообщения будет доставать какой-нибудь пул потоков и обрабатывать
Fᴏʀᴅᴇɴ
А либа асинхронно работает?
А напиши свою Есть же aiohttp
🍁 Jaŭhien
Не список, queue
🍁 Jaŭhien
Или deque
Sergey
Ждать не долго. Не очень хорошо, если пропущу обновление.
то, что в один момент времени работает только один поток - не означает, что пока он не закончится, другой поток не начнет выполняться. Там псевдопараллельность - быстрое переключение между потоками. Для сетевых задержек вполне хватит скорости (с запасом), если мы говорим о сотнях соединений
Anonymous
Для ВК есть асинк
Anonymous
Либа
🍁 Jaŭhien
МишанЯ
Для ВК есть асинк
Что за либа?
Fᴏʀᴅᴇɴ
🍁 Jaŭhien
Aiovkapi
А она допилена?
Fᴏʀᴅᴇɴ
А она допилена?
В дев версии вроде да
МишанЯ
А если без либ? С requestom как то привычнее работать, а это либу заново изучать
Anonymous
Что за либа?
Async-vk-api норм
Anonymous
Вроде как
Anonymous
Самая быстрая по идее
Sergey
Ну вообще есть ещё разные ядра
Не стал голову забивать лишней информацией
МишанЯ
Либы это либы...это заново код переписывать, заново в либу вникать и изучать. Зачем это? Когда есть код с requests и его надо доработать. Значит судя из сказанного, продолжать использовать threading. Но не создавать новый поток каждый раз, а пусть один поток крутится и обрабатывает очередь, которую заполняет лонгполл? Что там в качестве очереди юзать лучше?
🍁 Jaŭhien
Очередь queue.Queue или collections.deque
Sergey
Насчет либ согласен, что ты становишься зависимым от ее создателя. Изменился api в контакте, а чувак забросил либу и придется разбираться с чужим кодом, либо переписывать на другую либу, либо делать свою. Словом, любое решение несет какие то риски. Но вот вникать и изучать что-то новое - это очень нужно и правильно. Для закрепления полученных знаний иногда полезно свой проект переписать с их учетом (помогает лучше понять нюансы). Хорошо как раз попробовать разобраться с асинхронным программированием, написав проект с использованием этого направления (например, после того, как получишь рабочий вариант с помощью тредов).
МишанЯ
Переписывать по любому буду, но надо сделать сейчас скелет работающий, а уже потом его улучшатт и улучшать.
МишанЯ
Не один поток, а пулл потоков
А почему пулл? Один разве не справится?
Tishka17
Я чёт упустил, а какую проблему решаем?
Alex
Либы это либы...это заново код переписывать, заново в либу вникать и изучать. Зачем это? Когда есть код с requests и его надо доработать. Значит судя из сказанного, продолжать использовать threading. Но не создавать новый поток каждый раз, а пусть один поток крутится и обрабатывает очередь, которую заполняет лонгполл? Что там в качестве очереди юзать лучше?
Зачем писать то, что уже реализовано много раз в готовых инструментах людьми которые наверняка хорошо знают как лучше работать с тем или иным АПИ и какая функциональность может быть нужа разработчику? В тырпрайзе тебе никто не даст городить на каждый чих свой инструмент, когда уже есть готовые. "Заново учить?". Да. Учить заново. Это полезно. Всегда. Это прокачивает твой скилл. Смотрел бы что есть в готовых библиотеках, знал бы что использовать для очередей.
Tishka17
Нет.
Пакета thread больше не существует.
Tishka17
И не не с лучшей стороны их характеризует
Nikolay
Помянем
МишанЯ
Какой тырпрацс? Я для себя делаю.
Nikolay
Я чёт упустил, а какую проблему решаем?
Как не работать и чувствовать себя отлично
Alex
Какой тырпрацс? Я для себя делаю.
"для себя" тем более полезно смотреть что есть в готовых инструментах и как оно работает.
Tishka17
Как не работать и чувствовать себя отлично
Это не проблема. Как не работать и чтобы было на что жить - вот это другое дело
Tishka17
Я для себя выработал такой план: 1. Смотрим готовую либу 2. Говорим "фу" 3. Делаем велосипед 4. Смотрим 2 готовые либы 5. Говорим фу на свой код 6. Берём и юзаем что-то готовое, но уже осознанно
Anonymous
Anonymous
!vote ban
Tishka17
1хбет)
А где кнопка "пропустить рекламу"?
Alex
А где кнопка "пропустить рекламу"?
"пропустить можно будет через ∞ секунд."
Tishka17
Это как так ?
Остался только threading
iddqmeоw
помогите разобраться в каких случаях создавать обычную копию, а в каких глубокую... в данный момент ситуация такая: string = {'a': None, 'b': None, 'c': None} for x in deepcopy(string): if x == 'a': del string[x] чтобы не получить в этом коде RuntimeError я пользовался "deepcopy", но "copy" тоже всё как оказалось работает нормально хотя насколько мне ранее было известно... если меняется копия - должен менятся и оригинал, соответственно при использовании copy должна быть ошибка... или я что-то не правильно понял? разьясните плз
Kop
Остался только threading
Тогда все ок, думал уже от него отказались
Tishka17
я не понимаю к чему это(
Словарь с названием "строка"
iddqmeоw
Словарь с названием "строка"
аа) ну тут я дурак да, извиняюсь)
🍁 Jaŭhien
Остался только threading
Его вроде просто переименовали в _thread
🍁 Jaŭhien
никогда им не пользовался
Tishka17
я не понимаю разницы как раз в этом
Да нет у тебя иерархии, какую ты разницу хотел увидеть?
iddqmeоw
Да нет у тебя иерархии, какую ты разницу хотел увидеть?
что ты подразумеваешь под иерархией?
🍁 Jaŭhien
deepcopy копирует рекурсивно, а copy - поверхностно
Tishka17
{"a":{"b":[1,2,3]}}
Sergey
что ты подразумеваешь под иерархией?
Когда значение само является сложным типом (словарь, список и т. д)
iddqmeоw
Да нет у тебя иерархии, какую ты разницу хотел увидеть?
я правильно понимаю, что результаты copy и deepcopy данного словаря должны быть разные? {"a":{"b":[1,2,3]}}
Tishka17
Смотря что ты считаешь разными
iddqmeоw
🍁 Jaŭhien
Copy скопирует ссылки, а deepcopy создаст новые объекты