• Какую карту мира выбрать для python приложения?

    @bacon
    osm
    Ответ написан
    Комментировать
  • Как расчитать кол-во вариантов при рандомизации текста?

    @s_hoffman Автор вопроса
    Вариант на python.
    Пока сырой, но оставлю тут. Вдруг кому пригодится

    import re, random, math
    
    class RandomChoice(list):
        pass
    
    class RandomOrder(list):
        pass
    
    
    def random_choice(options) -> int:
        total = 0
        for option in options:
            if isinstance(option, RandomChoice):  # вложенный выбор варианта
                total += random_choice(option)
            elif isinstance(option, RandomOrder):  # вложенное переупорядочивание
                total += random_order(option)
            else:
                total += 1
        return total
    
    def random_order(options) -> int:
        total = math.factorial(len(options))
        for option in options:
            if isinstance(option, RandomChoice):  # вложенный выбор варианта
                total *= random_choice(option)
            elif isinstance(option, RandomOrder):  # вложенное переупорядочивание
                total *= random_order(option)
            # а для просто варианта ничего делать не надо
        return total
    
    def total_count(items) -> int:
        total = 1
        for item in items:
            if isinstance(item, RandomChoice):  # вложенный выбор варианта
                total *= random_choice(item)
            elif isinstance(item, RandomOrder):  # вложенное переупорядочивание
                total *= random_order(item)
        return total
    
    
    def constructor(text):
        struct = RandomChoice()
        if text.startswith("{"):
            text = text[1:-1]
            struct = RandomChoice()
        elif text.startswith("["):
            text = text[1:-1]
            struct = RandomOrder()
            
        gen = (x for x in list(text))
        string_buffer = ""
        buffer = ""
        while True:
            if buffer:
                return buffer
            try:
                symbol = next(gen)
                
            except StopIteration:
                if string_buffer:
                    struct.append(string_buffer)
                    string_buffer = str()
                return struct
            
            if symbol == "{" or symbol == "[":
                target = symbol
                if string_buffer:
                    struct.append(string_buffer)
                    string_buffer = ""
    
                counter = 1
                buffer += symbol
                while True:
                    try:
                        symbol = next(gen)
                    except StopIteration:
                        break
                    buffer += symbol
                    if symbol == target:
                        counter += 1
                    elif symbol == ("}" if target == "{" else "]"):
                        counter -= 1
                    if counter == 0:
                        c = constructor(buffer)
                        struct.append(c)
                        buffer = ""
                        break
                    
            elif symbol == "|":
                struct.append(string_buffer)
                string_buffer = str()
                
            elif symbol == "}" or symbol == "]":
                if string_buffer:
                    struct.append(string_buffer)
                    
            else:
                string_buffer += symbol
                
    
    def myshuffle(l):
        random.shuffle(l)
        return l
    
    
    def parse(j):
        
        buffer = list()
        if type(j) != list:
            j = [j]
        
        for i in j:
            if type(i) == str:
                buffer.append(i)
                
            elif isinstance(i, RandomChoice):
                buffer.append(parse(random.choice(i))[0])
                buffer.append(" ")
                
            elif isinstance(i, RandomOrder):
                g = myshuffle([parse(x)[0] for x in i])
                buffer.append(" ".join(g))
            
        return buffer
    
    f = """1-2 {комнатные|к.|ком.|Комн.} квартиры в {центре|центре города}. {Хороший|Отличный} ремонт, [пластиковые окна,|кабельное ТВ,|Интернет,|стиральная машина,|2 телевизора,|микроволновка,|пылесос,|утюг,|посуда,] новая мебель. Все {необходимые документы|документы}. В {этой|данной} квартире {очень|достаточно} [уютно,|тихо,] комфортно. {В шаговой доступности|Рядом|Рядом с домом} [2 аптеки,|3 супермаркета,] 2 стоянки для {авто|автомобилей}."""
    
    o = constructor(f)
    print("combos:", total_count(o))
    print("random result:", "".join(parse(list(o))))
    Ответ написан
    Комментировать
  • Как сделать так, чтобы пайтон, при выполнении функции, мог еще использовать. Тоесть началась обработка, где тайм на 1 час, а остальной код не работае?

    @dmshar
    Нет, объяснили вы разумеется очень "не нормально". Прочитайте сами, что написали. Ваш скрипт работает ровно так, как он и должен работать. Останавливаться, ждать заданный промежуток времени и после продолжать свою работу.
    Если вашу загадочную фразу "чтобы пайтон, при выполнении функции, мог еще использовать." понимать, как параллельную работу двух программ, то для этого вам необходимо использовать средства соответствующих библиотек организации параллельных вычислений.
    Начать изучение можете, например, вот отсюда:
    onreader.mdl.ru/PythonParallelProgrammingCookbook....
    https://russianblogs.com/article/6490208477/
    https://habr.com/ru/post/167503/
    Ответ написан
    Комментировать
  • Почему у приложений нельзя посмотреть исходный код?

    @bacon
    Пора узнать что такое компиляция.
    Ответ написан
    Комментировать
  • Как обойтись без крона?

    @bacon
    Нанять человека, который каждый день будет вставать в 4-55 по будильнику и запускать скрипт, для надежности нанять нескольких.
    Ответ написан
    Комментировать
  • Можно ли запускать асинхронный (asyncio, aiohttp) код в custom django-admin commands?

    @bacon
    можно, я писал же про твои проблемы (а именно у тебя скорее всего где-то синхронный код, который блочит eventloop)
    я очень давно (когда еще даже async не начинали впиливать) так делал чат на вебсокетах, в commands запускал aiohttp, через run_in_executor вызывал ORM
    Ответ написан
    4 комментария
  • Как запустить бесконечный цикл в django приложении?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Django
    Седой и строгий
    Я бы отказался от использования моделей Django, они не предназначены для использования в конкурентном окружении, и написал отдельный асинхронный микросервис, связанный с django-проектом через пару очередей.
    Ответ написан
    4 комментария
  • Как запустить бесконечный цикл в django приложении?

    @bacon
    Изначально все работало на celery, но непрактичность такого подхода довольно очевидна. Воркеры спали 90% рабочего времени (подключение к прокси и ожидания ответов).
    Естественно, с увеличением кол-ва задач мне пришлось бы создавать неразумное количество воркеров, которые бы попросту расходовали ресурсы.
    вывод неверен, это нормальное решение, если только тут не было проблемы ожидания ответов.

    Выносить все за пределы приложения мне бы крайне не хотелось, тк важно оставить возможность работать напрямую с моделями
    вариант, запускать event loop в custom django-admin commands, а саму команду через тот же systemd
    Ответ написан
    3 комментария
  • Как получить все поля связанных моделей каскадно?

    @bacon
    это вообще-то базовое,
    Accounts.objects.filter(clusters__project__name='Имя проекта')
    А модели принято называть в единственном числе.
    Ответ написан
    2 комментария
  • Как сделать торговую площадку-бота на python?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Надо правильно сформулировать задачу, и нанять специалиста для подготовки по вашему описанию техзадания. Также тут неплохо бы привлечь специалиста по UI/UX для проектирования внятных человекомашинных интерфейсов.
    Утвердить техзадание, затем нанять специалистов для написания программного комплекса по техзаданию. Также нанять тестировщиков для тестирования кода, а также нанять специалиста (девопса) для развертывания комплекса.
    Не забыть нанять бухгалтера для бухучёта и налогов.
    Это не всё, но как-то так…
    Ответ написан
    Комментировать
  • Почему не срабатывает JS по триггерам show.bs.modal и hide.bs.modal?

    @DmitryKyd Автор вопроса
    Студент специальности ИАСБ
    Проблема решена! Оказалось у меня было подключено несколько версий jQuery и из-за этого скрипт не отрабатывал.
    Ответ написан
    Комментировать