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