• Как использовать sqlite python в многопоточности?

    @antares4045
    Коннект надо поднять ОДИН раз в главном потоке а курсоров из него уже можете понаделать на все потоки (вроде). Если не поможет: то только открывать-закрывать подключение для каждой операции, например так: https://qna.habr.com/q/1062578#answer_2040432.

    Но как и в том ответе, отдельно подчеркну, что лучше всеравно поднять отдельный сервер нормальной бд и работать с ним в нормальном многопоточном режиме. Это довольно нишевая уловка (примерно так хранят историю браузеры).

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

    В абсолютно любой файловой системе многопоточный доступ к одному файлу не существует. совсем. программа может считать файл (или его часть) в оперативную память, а потом заменить файл на что-то вычисленное на основе считанного (есть ещё возможность делать "аппенд", но это синтаксический сахар реализованный на уровне ос (возможно я не прав: знатоки поправьте меня)).

    Соответственно если несколько программ одновременно пытаются изменить один файл, то в итоге останется просто результат работы последней отдавшей на сохранение, и построен он будет на основе той версии файла, которая была в момент когда эта программа считала файл.

    Sqlite это просто файл у вас на диске, и еcли бы не та защита которая вам не даёт создать многопоточную программу, то вам бы казалось, что она вообще не работает: каждый поток видит в базе только то, что сделал в базе он сам, а после перезапуска вы вообще видите в лучшем случае версию базы от потока, закрывшего соединение последним (а то и вообще битый файл).
    Для того, чтобы всякие профессионалы не писали, что "этим вашим sqlite не возможно пользоваться", была встроена защита (куда более адекватный аналог которой есть на всех файлах microsoft office) если хоть кто-то сейчас работает с файлом, то его открывать нельзя и, если не оговорено обратное, падает с ошибкой.

    Проблеме столько же лет, сколько люди пытаются одновременно менять что-то в одном предмете. К сожалению, этот случай, когда приходящий сходу в голову достаточно затратный подход единственно работоспособен в общем случае (в конкретно вашем случае может можно придумать какое-то более простое правило, но изложенное дальше будет работать всегда и везде): первый агент берёт эталон, и оставляет записку "я работаю, ждите", вносит свои изменения и не оставляет эталон у себя, за время его работы у записки уже собралась уже недовольная очередь, которой тоже работать надо -- когда эталон освобождается, первый в очереди забирает его себе оставив уже свою записку. и так далее.

    Правила организации этих очередей целая наука от которой сойти с ума можно, но в случае sqlite настраиваемый параметр у нас ровно один: сколько мы готовы ждать.

    По коду:
    никаких созданий коннектов и курсоров ни глобально ни в потоке: у нас игра в гоячую кортошку -- все пытаются держать базу минимальное время.
    Вместо этого каждый раз, когда вы хотите сделать что-то с базой вместо

    cursor.execute(clause, props)
    result = cursor.fetchall()

    или что там у вас было пишем

    with sqlite3.connect(`Ваши параметры подключения`, timeout=`Какое-то зверски большое число секунд, которое мы готовы "стоять в очереди"`) as connect: 
      # создаём подключение к базе которое существует только в рамках блока with 
      # то что мы здесь напишем должно отработать максимально быстро
      cursor = connect.cursor()
      cursor.execute(clause, props)
      result = cursor.fetchall()

    В идеале вообще вынесите это в отдельную функцию

    p.s. если вы зашли сюда в поисках истины, то мы продолжили общение тут и в итоге победили.
    Ответ написан
    9 комментариев
  • Как запустить проект (django+html) с гитхаба?

    Alex_shady
    @Alex_shady
    1. активируй виртуальное окружение source myenv/bin/activate
    2. установи зависимости pip install -r requirements.txt
    3. проведи миграции python manage.py makemigrations, python manage.py migrate
    4. запусти локальный сервер python manage.py runserver
    Ответ написан
    Комментировать
  • Как использовать Telethon в потоках?

    @neuro4live Автор вопроса
    Всем спасибо. Разобрался сам.
    Может кому пригодится:
    from telethon import TelegramClient
    import asyncio
    import threading
    
    
    
    
    
    
    
    async def send_message():
        loop = asyncio.new_event_loop()
        api_id = 555
        api_hash = '555555555'
        client = TelegramClient('55555555.session', api_id, api_hash, loop=loop)
        async with client:
            await client.send_message('+55555555', '123')
    
    
    
    
    
    def go():
        asyncio.run(send_message())
    
    
    threading.Thread(target=go).start()
    Ответ написан
    Комментировать
  • RuntimeWarning: Enable tracemalloc to get the object allocation traceback?

    Блин ну в ошибки все указано вы никогда не ждали функцию bot.send_message, у вас вот везде нормально стоит await, а в той строчки не указан, добавьте await, и как минимум там ошибки не будет
    ну и строки так не комильфо собирать
    Ответ написан
    Комментировать
  • Как остановить работу программы Python?

    @artem_sib
    sys.exit()
    Ответ написан
    Комментировать
  • Как запустить скрипт питон из другого скрипта питон?

    deepblack
    @deepblack Куратор тега Python
    Импортируете модуль subprocess

    import  subprocess
    
    subprocess.Popen(['python3', 'script.py', 'argzzz1', 'argzzz2'])


    UPD:
    Путь к интерпретатору Python3
    import sys
    >>> sys.executable
    '/usr/bin/python3'


    Более подробно читать тут
    Ответ написан
    9 комментариев
  • Как проверить json массив на пустоту?

    yarkov
    @yarkov
    Помог ответ? Отметь решением.
    if (Array.isArray(element) && !element.length) {
    // пустой массив
    }
    Ответ написан
    Комментировать
  • Как включить автоматическую сборку на Jenkins?

    EreminD
    @EreminD
    Кое-что умею
    WebHooks. Когда кто-то пушит в битбакет, битбакет сообщает дженкинсу, что нужно стартануть джобу
    Инструкция
    Ответ написан
    Комментировать
  • Как увидеть диаграмму в MySQL WorkBench по готовой БД со всеми связями?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега MySQL
    Нужно создать новую модель, в меню выбрать Database -> Reverse Engineer. Дальше там более-менее понятно.

    P.S. Ужасная, глючная неинтуитивная программа... По крайней мере под Линуксом.
    Ответ написан
    Комментировать
  • Что почитать по системному администрированию?

    @res2001
    Developer, ex-admin
    Не буду рекомендовать литературу, обозначу основные направления.

    1.Знания по сетям надо подтянуть. Организация с точки зрения админа - это в первую очередь локальная сеть и организация работы многих устройств в этой сети. Часто имеется географически распределенная сеть.
    У вас пока больше ремонт и обслуживание оборудования.
    В домашних условиях изучать сети проблематично. Проще всего устроится в контору, где уже есть 1-2 админа и совместно решать конкретные задачи в конкретных условиях. Условия в разных организациях могут быть очень разными, а от этого сильно зависят способы решения задач.

    2.Базы данных. Они есть в любой организации. Даже бывает, что организация не знает об этом.
    Поэтому на каком-то уровне нужно знать БД: настройка, бэкап, оптимизация. Хорошо знать SQL - реально часто полезен. Хорошо хотя бы иметь представление с какой стороны заходить к 1-2 распространенным СУБД. Например взять 1 из корпоративного сектора (MS SQL) и одну свободную (Postgre, MySQL). Лучше начинать с реляционных СУБД. Сейчас полно других вариантов, но реляционные наиболее универсальный вариант и подходят практически в любых ситуациях, к тому же в корпоративном секторе используются в основном РСУБД. Специализированные СУБД могут быть в каких-то направлениях более эффективны, чем РСУБД, но это уже совсем другая история.

    3.Изучать скриптовые языки применительно к административным задачам. Начать следует с языков командной оболочки используемой ОС (cmd, powershell, bash), после этого хорошо изучить какой-либо универсальный ЯП (python). Этому может способствовать такой подход: есть некая задача, вы можете ее решить используя GUI утилиту, попробуйте ее решить без применения GUI инструментов. Стоит помнить о том, что инструменты администрирования командной строки являются первичными, а затем они уже обрастают GUI надстройками. Часто задачи решаются только из командной строки.
    Ответ написан
    1 комментарий
  • В каком направление двигаться начинающему системному администратору?

    Viji
    @Viji
    DevOps Engineer
    В конце концов можно заняться сертифицированием, получите CISCO CCNA или Microsoft сертификаты, автоматизируйте ваши типичные задачи с помощью PowerShel - заодно его выучите, поставьте на один комп Линукс.. дополните его аутентификацией в AD, поизучайте сам Линукс.

    У вас есть свободное время и пространство для развития - кайфуйте с этого!
    Ответ написан
    Комментировать
  • В каком направление двигаться начинающему системному администратору?

    @TheBigBear
    СтарОдмины мы
    Для начала определитесь - стагнация или потеря интереса к профессии
    Даже в рамках одной конторы можно интересно и с пользой для дела получать знания
    Вот навскидку:
    Поиграйтесь с VLAN, разделение сети на сегменты, поднятием MESH
    Поставьте и настройте Zabbix, натравите на мониторинг сети
    Подберите на свой вкус программу инвентаризации и учета (например, GLPI)
    Найдите удалённую подработку
    Самое главное - это чтобы было интересно
    Ответ написан
    Комментировать
  • Почему не отображаются компьютеры на WSUS?

    Всё внятно расписано в мануале.
    На всякий случай reg-файл:
    Windows Registry Editor Version 5.00
    [HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate]
    "WUServer"="http://"ip-adres_WSUS":8530"
    "WUStatusServer"="http://"ip-adres_WSUS":8530"
    [HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU]
    "RescheduleWaitTime"=dword:00000001
    "NoAutoRebootWithLoggedOnUsers"=dword:00000000
    "NoAutoUpdate"=dword:00000000
    "AUOptions"=dword:00000003
    "ScheduledInstallDay"=dword:00000002
    "ScheduledInstallTime"=dword:0000000d
    "RebootRelaunchTimeoutEnabled"=dword:00000001
    "RebootRelaunchTimeout"=dword:0000001e
    "UseWUServer"=dword:00000001
    Ответ написан
    9 комментариев
  • Как запретить доступ мобильным устройствам к интернету?

    @Drno
    Ну по нормальному надо вынести вифи клиентов в отдельную подсеть. И на ней запретить
    Но на тп-линк это врятли

    Можно на dhcp сервере поставить выдачу неправильного шлюза.
    А на ПК вручную выставить нужный
    Ответ написан
    2 комментария
  • Как реализовать доступ к файловому серверу только для локальных пользователей?

    @Drno
    Файловый сервер на чем развернут то??
    Какая ОС? ПО?
    Либо либо делать на нём локально учетки, либо ad,ldap, И так далее.
    Ответ написан
    2 комментария
  • Как реализовать доступ к файловому серверу только для локальных пользователей?

    @Mikeoldfield
    Сетевой инженер / системный администратор
    Дать доступ только локальным пользователям.
    Либо группа AD, либо только из внутренней сети, либо выборочно каждому.
    Ответ написан
    2 комментария
  • Как реализовать доступ к файловому серверу только для локальных пользователей?

    SignFinder
    @SignFinder
    Wintel\Unix Engineer\DevOps
    1. По логинам и членствам в в определенным группам.
    2. По ip подсетям.
    Ответ написан
    Комментировать
  • Как уменьшать и адаптировать текст, когда он не помещается в блок?

    Думаю вам подойдет использование vh. Например:
    .some-text {
        font-size: 100vh;
        line-height: 100vh;
    }

    Вот статья на хабре
    Ответ написан
    1 комментарий
  • Как стилизовать input type=file?

    Stalker_RED
    @Stalker_RED
    Никак.
    Сделай его прозрачным, и под ним напиши что угодно. Можно даже котика нарисовать.
    Ответ написан
    2 комментария