Задать вопрос
  • Как удалить стикер ботом?

    @PVkolos
    Father4, как вы взяли id сообщения со стикером?
  • Почему Telegram Бот на aiogram на сервере потребляет много ОЗУ?

    @PVkolos Автор вопроса
    mayton2019, тут дело в том, что на локальном пк сборщик мусора все очищает и все идет классно, только вот на сервере убунту сборщик работает крайне криво
  • Почему Telegram Бот на aiogram на сервере потребляет много ОЗУ?

    @PVkolos Автор вопроса
    mayton2019, я использовал машину состояний в aiogram, в которой использую озу для хранения данных от пользователя. Это может как-то сильно отразиться на состоянии памяти?
  • Почему Telegram Бот на aiogram на сервере потребляет много ОЗУ?

    @PVkolos Автор вопроса
    mayton2019, сервер на ubunty. Команда ps -o pid,user,%mem,command ax | sort -b -k3 -r показала что запущенно несколько ботов, или процессов:
    PID        USER  %MEM   COMMAND
        208    root    7.4      /lib/systemd/systemd-journald
      26339    root    4.7     python3 aiogram_version.py
      26319   root    4.7       python3 aiogram_version.py
      26380 root     32.4      python3 aiogram_version.py
        311    root    1.9       /usr/bin/python3 /usr/bin/fail2ban-server -xf start
      43910   root  16.8    python3 aiogram_version.py

    Если что, aiogram_version.py это бот
  • Почему Telegram Бот на aiogram на сервере потребляет много ОЗУ?

    @PVkolos Автор вопроса
    shurshur, он не выполняет ничего трудоемкого. Пример кода, который жрет от 50 до 100 мб я привел внизу
  • Почему Telegram Бот на aiogram на сервере потребляет много ОЗУ?

    @PVkolos Автор вопроса
    PVkolos, Хоть я и удаляю все переменные, но за вызов такой функции расходуется от 50 до 100 мб озу. Ладно расходуется, но эта память потом не очищается и так и остается занятой
  • Почему Telegram Бот на aiogram на сервере потребляет много ОЗУ?

    @PVkolos Автор вопроса
    mayton2019, ок, приведу пару функций и сколько памяти они жрут.
    async def analytic(spreadsheet_id):
        service = build('sheets', 'v4', credentials=credentials)
        req1 = []
        req1.append({'addSheet': {'properties': {'title': 'Аналитика'}}})
        body1 = {'requests': req1}
        try:
            service.spreadsheets().batchUpdate(spreadsheetId=spreadsheet_id, body=body1).execute()
        except HttpError:
            pass
        body_values = []
        body_values.append(['Месяц записи', ' ', 'Раздел'])
        deletsheet(spreadsheet_id)
        r = await read_new('Категории и разделы', spreadsheet_id)
        buttons = [' ']
        total = dict()
        for el in r:
            if el[0] not in buttons and el[0] != 'Раздел':
                buttons.append(el[0])
                total[el[0]] = 0
        buttons.append('Итого')
        body_values.append(buttons)
        sheet = await read('Записи бота', spreadsheet_id, 'ROWS')
        ms = {'1': 'январь', "2": "февраль", "3": "март", "4": "апрель", "5": "май", "6": "июнь", "7": "июль", "8": "август",
                                                        "9": "сентябрь", "10": "октябрь", "11": "ноябрь", "12": "декабрь"}
        my_ms = []
        my_keys = {}
        for i in range(1, len(sheet)):
            try:
                if ms[str(int(sheet[i][0].split('-')[1]))] not in my_ms:
                    my_ms.append(ms[str(int(sheet[i][0].split('-')[1]))])
                    my_keys[sheet[i][0].split('-')[1]] = {el: 0 for el in buttons[:-1] if el not in " Раздел"}
            except KeyError:
                print('Дурак, ты, наерное, отредактировал дату записи, поэтому бот ее не понимает')
        my_ms.append('Всего')
        for el in sheet[1:]:
            total[el[2]] += int(el[4])
        for el in sheet[1:]:
            my_keys[el[0].split('-')[1]][el[2]] += int(el[4])
        for i in range(len(my_ms) - 1):
            body_values.append([my_ms[i], *list(my_keys[f'0{i + 1}'].values()), sum(list(my_keys[f'0{i + 1}'].values()))])
        body_values.append(['Всего', *list(total.values())])
        print(sys.getsizeof(body_values) + sys.getsizeof(my_keys) + sys.getsizeof(my_ms) + sys.getsizeof(sheet) + sys.getsizeof(buttons))
        body = {'values': body_values}
        range_ = f'{"Аналитика"}!A1'
        service.spreadsheets().values().update(spreadsheetId=spreadsheet_id, range=range_, valueInputOption='USER_ENTERED',
                                               body=body).execute()
        del body, body1, body_values, service, my_ms, my_keys, total, r, sheet, buttons, ms, req1, range_


    Это код из отдельного файла, в боте я просто асинхронно ее вызываю
    @dp.message_handler(commands=['analytics'])
    async def analytics(message):
        try:
            if db.get_id_sheets(message.from_user.id) != 'none': # Проверка, что юзер указал ссыклу на GOOGLE SHEETS
                tb_name = await table(db.get_id_sheets(message.from_user.id)) # Получение ссылки на таблицу
                await send(message.from_user.id, message.from_user.first_name + ", аналитика ваших записей может занять много времени. Когда аналитика окончится, "
                                                                                " бот пришлет вам сообщение об этом. Результаты появятся в вашей таблице на листе <b>Аналитика</b>. ")
                id_sh = db.get_id_sheets(message.from_user.id) # Получение id google sheets юзера
                await analytic(id_sh) # Проводим аналитику
                await send(message.from_user.id, "Аналитика завершена. ЕЕ вы можете найти <a href='" + tb_name[1] + "'>в своей google sheets таблице</a> на листе <b>Аналитика</b>")
            else:
                await send(message.from_user.id, message.from_user.first_name + ', Вы не указали таблицу google sheets.\n'
                                                                                'Чтобы указать таблицу для записей введите команду /set_table')
        except Exception as e:
            print('Error analytic: ', e)
  • Почему Telegram Бот на aiogram на сервере потребляет много ОЗУ?

    @PVkolos Автор вопроса
    mayton2019, cначала в простой кортеж, потом отсылает это боту, а потом удаляет кортеж
  • Почему Telegram Бот на aiogram на сервере потребляет много ОЗУ?

    @PVkolos Автор вопроса
    нет, ничего такого не делает. Просто обращается к апи гугла и берет некоторые данные из таблиц
  • Запуск скрипта по SSH

    @PVkolos
    запускаю screen командой "screen"
    Хочу запустить бота, а команда python3 не найдена, хотя до запуска screen - в обычной программе с помощью python3 запускал свои скрипты
  • Запуск скрипта по SSH

    @PVkolos
    запускаю screen командой "screen"
    Хочу запустить бота, а команда python3 не найдена, хотя до запуска screen - в обычной программе с помощью python3 запускал свои скрипты
  • Запуск скрипта по SSH

    @PVkolos
    запускаю screen командой "screen"
    Хочу запустить бота, а команда python3 не найдена, хотя до запуска screen - в обычной программе с помощью python3 запускал свои скрипты