@ru_python

Страница 2224 из 9768
Игорь
14.02.2017
19:50:52
помнится для джаббера вообще в один поток все гоняли. И не парились, и работало все шустро, на сколько позволял канал и сервер

Artem
14.02.2017
19:50:59
если не связывать их никак, то легко получится масштабировать любую часть

Маришка
14.02.2017
19:51:03
а что с интерваллом который юзверь задаёт

Google
Artem
14.02.2017
19:52:04
не знаю, мб и на 3 - принимает инфу от юзеров, включая изменения конфигурации, рассылает юзерам согласно конфигурации и собирает инфу с рсс

Маришка
14.02.2017
19:52:25
так более муторно и больше кода уже выйдет

Artem
14.02.2017
19:52:33
ой ли

Игорь
14.02.2017
19:53:24
нефик плодить сущности

Artem
14.02.2017
19:54:47
Рассылка и сбор разные вещи, сбор завязан на события, приходящме извне, рассылка - на собственные

Alexey
14.02.2017
19:54:54
Давайте ещё базу воткните, очереди запилите, микросервисы и на каждый по контецнеру

Artem
14.02.2017
19:55:08
Так да, между ними база

Сергей
14.02.2017
19:55:38
Давайте ещё базу воткните, очереди запилите, микросервисы и на каждый по контецнеру
в оперативе всё хранить предлагаешь? и фиды, и настройки? :)

Alexey
14.02.2017
19:55:39
Мб просто подскажете человеку как сделать как хочет она?)

Artem
14.02.2017
19:55:44
Сложность-то при этом не увеличивается

Игорь
14.02.2017
19:56:48
Мб просто подскажете человеку как сделать как хочет она?)
нет. это не в этом чатике. В даный момент ты наблюдаешь мозговой штурм. А делать выводы - ее работа

Google
Сергей
14.02.2017
19:56:51
Мб просто подскажете человеку как сделать как хочет она?)
да тут уже вроде пытались, но человек хочешь с async/await, но не понимает куда их применять. хотя вроде тут уже разжовывали всё

Artem
14.02.2017
19:56:52
Это все нужно будет многожды перезапускать без потери данных

Конечно нужна база

Игорь
14.02.2017
19:57:56
Конечно нужна база
можно в json хранить

Artem
14.02.2017
19:58:05
Можно, но это тоже база

Просто хреновая

Игорь
14.02.2017
19:58:26
все зависит от нагрузки

Artem
14.02.2017
19:58:44
Ну может быть и не хреновая, а такая же)

Всегда синкаемся с файлом при изменении конфига

Сергей
14.02.2017
19:59:07
в json ты всегда будешь вынужден загружать всё, даже если тебе нужно только две записи.

Artem
14.02.2017
19:59:21
Без нагрузки это сработает

У меня был такой бот

Игорь
14.02.2017
19:59:30
Сергей
14.02.2017
19:59:43
ну и в итоге в чём профит?

Artem
14.02.2017
19:59:43
На 150 юзеров примерно, все работало ок.

Сергей
14.02.2017
20:00:00
сложность та же, по скорости - хуже.

Artem
14.02.2017
20:00:16
Но это тоже база, с тем же скулайтом никакой разницы

Nikolay
14.02.2017
20:00:44
с этим async уже, мне кажется, синдром молотка развился у людей. всё гвозди :)
это просто очень удобный инструмент для большинства задач

Игорь
14.02.2017
20:00:50
сложность та же, по скорости - хуже.
какая разница, когда бот висит на сервере, где твердотелки в качестве hdd

Сергей
14.02.2017
20:01:24
ну да. и память давай не экономить, на серверах куча её.

Google
Игорь
14.02.2017
20:03:37
ну да. и память давай не экономить, на серверах куча её.
на каждого юзера свой конфиг в json. фиды в кеше хранятся, хотя, если делать функу поиска по фидам, то лучше таки базу, но, если просто отдача фидов, то лучше просто файлами.

Сергей
14.02.2017
20:05:04
ну вот процес лишний - это лишние сущности, а куча файлов, гемор с хранением фидов, вместо одного небольшого файла sqlite - это нормально :)

Artem
14.02.2017
20:05:05
В чем разница с монгой?

Сергей
14.02.2017
20:05:25
если там данных на 100 кб, то вообще пофиг где и как хранить.

Игорь
14.02.2017
20:06:32
ну вот процес лишний - это лишние сущности, а куча файлов, гемор с хранением фидов, вместо одного небольшого файла sqlite - это нормально :)
проге и файловой системе пофик вообще на количество файлов, если конечно ты не юзаешь оооочень старое Г в качестве фс.

Сергей
14.02.2017
20:07:16
я просто не могу понять в чём смысл и профит использования текстовых файлов вместо компактной базы данных

Маришка
14.02.2017
20:07:39
?!? def post_on_channels(_content): for channel in channels: bot.sendMessage(channel, _content) await asyncio.sleep(interval)

Nikolay
14.02.2017
20:09:04
Eldar
14.02.2017
20:09:52
bot.sendMessage(channel, _content) по моему и эту штуку не плохо было бы сделать асинхронной

Сергей
14.02.2017
20:10:29
ну бд с ее транзакциями не всегда нужно
так никто же не заставляет использовать не нужное.

оно и так асинхронно
это ты где увидел?

Eldar
14.02.2017
20:11:48
оно и так асинхронно
разве? вроде как эти две строки for channel in channels: bot.sendMessage(channel, _content)по другому надо написать чтобы было асинхронно

Сергей
14.02.2017
20:13:27
разве? вроде как эти две строки for channel in channels: bot.sendMessage(channel, _content)по другому надо написать чтобы было асинхронно
Да. причём channels тоже не простой список должен быть https://www.python.org/dev/peps/pep-0492/#asynchronous-iterators-and-async-for

Игорь
14.02.2017
20:14:12
разве? вроде как эти две строки for channel in channels: bot.sendMessage(channel, _content)по другому надо написать чтобы было асинхронно
ну да. чет я и сегодня в перегрузе. Проход по каналам там надо разместить отдельно, а в этой функе оставть только сэнд

Google
Nikolay
14.02.2017
20:14:30
типа так: async def post_shit(channel, timeout): while True: post(channel, “shit”) await asyncio.sleep(timeout) async def schedule(workers): await asyncio.gather(workers) if __name__ == “__main__”: loop = asyncio.get_event_loop() workers = [post_shit(c, t) for c, t in CHANNELS] loop.run_forever(schedule(workers))

Eldar
14.02.2017
20:14:35
не ну так то можно и простым списком сделать, потом заюзать генератор c gather

Nikolay
14.02.2017
20:14:54
именно это и предложил

а там люди процессы какие-то хотят спавнить

Eldar
14.02.2017
20:15:18
post(channel, “shit”) вот это желательно должно быть асинхронным

Nikolay
14.02.2017
20:15:38
post(channel, “shit”) вот это желательно должно быть асинхронным
да, согласен, но все упирается в то, асинхронные ли биндинги для телеграма

я почти уверен, что пока нет

Игорь
14.02.2017
20:16:11
Admin
ERROR: S client not available

Игорь
14.02.2017
20:16:23
хотя. вроде уже переписывали

Nikolay
14.02.2017
20:16:25
переписать либу)
как вариант :)

Маришка
14.02.2017
20:16:33
telepot имеет разные версии ботов, обычный и асинхронный так что тут особо можно не парится

Eldar
14.02.2017
20:16:35
await asyncio.sleep(timeout) кажется что и это лишнее

Игорь
14.02.2017
20:16:38
надо сырки смотреть

Nikolay
14.02.2017
20:16:53
await asyncio.sleep(timeout) кажется что и это лишнее
это период, с которым надо постить

не, ну там проде можно через таймаут, как в джаваскрипте

но так императивней и без коллбэк хелла

Eldar
14.02.2017
20:18:17
?!? def post_on_channels(_content): for channel in channels: bot.sendMessage(channel, _content) await asyncio.sleep(interval)
@Enchantner тогда ты неправильно переписал, потому что в коде одна новость на несколько каналов рассылается\

поэтому и задержки не нужны

Google
Маришка
14.02.2017
20:19:00
ну да

Nikolay
14.02.2017
20:19:11
ну тогда перенести таймаут внутрь schedule

и цикл бесконечный

Eldar
14.02.2017
20:20:05
ну тогда перенести таймаут внутрь schedule
аее, да мы дрим тим) задача решена, дайте следующую:D

Nikolay
14.02.2017
20:20:13
в любом случае, код сложнее не станет

не надо никаких трех процессов, вот, две функции и все

Сергей
14.02.2017
20:21:20
ты сейчас в двух функциях описал одну часть задачи :) рассылку. А нужно ещё принимать сообщения от пользователя и парсить фиды.

Сергей
14.02.2017
20:22:43
Простые. по отдельности. Запихни сейчас всё это в своё решение и посмотри, не проще ли будет всё сделать отдельными сервисами. Особенно когда нагрузка пойдёт :)

Nikolay
14.02.2017
20:23:29
просто спавним несколько тасков и все

периодических

еще вопрос, какой код большую нагрузку выдержит

Сергей
14.02.2017
20:25:12
А теперь представь, что парсинг не быстрый, фидов - 500 штук и пользователей у тебя уже 1500. Реально считаешь, что один процес с асинхронщиной будет справляться быстрее трёх с учётом многоядерности?

Nikolay
14.02.2017
20:25:50
если рассылка пользователям делается параллельно, а парсинг фида занимает сильно меньше времени, чем промежуток между рассылками (а это, скорее всего так), то то, что они бегут в одном эвентлупе - вообще не проблема

и да, оно будет быстро

Nikolay
14.02.2017
20:27:28
Можно ещё планировщик заданий запилить)
можно, но тут просто переключение контекста на await справится

Сергей
14.02.2017
20:27:31
вот в этом и проблема - сплошные допущения и если. а если справляться перестанет - как масштабировать будешь?

Страница 2224 из 9768