Задать вопрос
  • Почему не отображается картинка в SVG на GitHub?

    @3FANG Автор вопроса
    Я кстати пробовал вставлять как data:image, но использовал xlink:href и у меня высвечивалось ошибка типа "invalid image source" вместо SVG. Но сейчас я использовал просто href и все заработало. Спасибо вам.
    Но вы говорите, что анимация работать не будет, тем не менее, здесь она работает - https://github.com/vaaski/vaaski/tree/master
    Написано
  • Как обрабатывать ошибки в асинхронном коде?

    @3FANG Автор вопроса
    Everything_is_bad, все не так уж и плохо
    Написано
  • Как обрабатывать ошибки в асинхронном коде?

    @3FANG Автор вопроса
    Everything_is_bad, ну не ругайся же ты
    Написано
  • Как обрабатывать ошибки в асинхронном коде?

    @3FANG Автор вопроса
    В таком случае:
    import asyncio
    
    
    async def exc():
        print(1 / 0)
        
    
    async def main():
        task = asyncio.create_task(exc())
        try:
            await asyncio.gather(task)
        except ZeroDivisionError as ex:
            print(f"Ошибка {ex} обработана")
    
    
    asyncio.run(main())

    Ошибка теперь обрабатывается. Можешь подробнее объяснить как это работает?
    Написано
  • Как итерировать асинхронный генератор, который уже находится в работе?

    @3FANG Автор вопроса
    shurshur, уточни где кончтрукция вида for obj in generator(). Я же создаю объект генератора конструкцией gen = get_proxy_and_key(PROXY_KEYS, а потом прохожусь по нему с помощью await anext(proxy_and_key_gen)
    Написано
  • Как работает запуск корутин в asyncio?

    @3FANG Автор вопроса
    fenrir, почему первый в выводе оказывается старт? Хотя если не запускать таски с помощью await, а остановиться только на их создании (task = asyncio.create_task(waste_time()), то вывод вообще будет таким:
    Start work... 
    Start work... 
    Start work... 
    Start work... 
    Start work... 
    Start work... 
    Start work... 
    Start work... 
    Start work... 
    Start work... 
    0.0021376609802246094

    Почему тогда он не идет дальше, а останавливается на await asyncio.sleep(2)?
    Написано
  • Как работает запуск корутин в asyncio?

    @3FANG Автор вопроса
    я еще не осознал сказанное вами, пока в процессе.
    Почему первый в выводе оказывается старт?
    Хотя если не запускать таски с помощью await, а остановиться только на их создании (task = asyncio.create_task(waste_time()), то вывод вообще будет таким:
    Start work...
    Start work...
    Start work...
    Start work...
    Start work...
    Start work...
    Start work...
    Start work...
    Start work...
    Start work...
    0.0021376609802246094


    Почему тогда он не идет дальше, а останавливается на await asyncio.sleep(2)?
    Какой в итоге функционал содержит await?

    У меня такая каша в голове, выручите меня...
    Написано
  • Как работает запуск корутин в asyncio?

    @3FANG Автор вопроса
    fenrir,

    Я правильно понимаю, что команда await asyncio.sleep(2) работает таким образом:
    Мы переходим в функцию sleep(), там она стопится, т.е. входит в состояние ожидания результата, контроль выполнения возвращается в функцию waste_time(), откуда и была вызвана sleep(), а оттуда обратно в main() и далее в цикле он продолжает делать то же самое (в waste_time() - в sleep() - обратно в waste_time() - обратно в main()). По прошествии 2 секунд, внутренний механизм asyncio мониторинга состояния корутин уведомляет событийный цикл, что первая корутина получила ответ (иначе говоря, завершила свою работу), событийный цикл после этого передает контроль выполнения обратно в функцию, откуда была вызвана первая корутина, т.е. в waste_time(),, она продолжает свое выполнение и выводит на печать "End work!". Сразу за ней событийный цикл получил такие же уведомления от остальных корутин (через механизм мониторинга, само собой), ибо они тоже закончили свое выполнение (все почти одновременно), и с ними повторяется такой же процесс. Поэтому после первой корутины мы также видим подряд вывод всех остальных - "End work!".

    А команда await, в цикле в функции main(), из-за того что не находится в таске - не участвует в очереди, поэтому она просто встает в ожидание результата корутины, вместо того, чтобы переключится на другие.

    Прокомментируйте пожалуйста сложившееся у меня представление
    Написано
  • Как работает запуск корутин в asyncio?

    @3FANG Автор вопроса
    Я правильно понимаю, что команда await asyncio.sleep(2) работает таким образом:
    Мы переходим в функцию sleep(), там она стопится, т.е. входит в состояние ожидания результата, контроль выполнения возвращается в функцию waste_time(), откуда и была вызвана sleep(), а оттуда обратно в main() и далее в цикле он продолжает делать то же самое (в waste_time() - в sleep() - обратно в waste_time() - обратно в main()). По прошествии 2 секунд, внутренний механизм asyncio мониторинга состояния корутин уведомляет событийный цикл, что первая корутина получила ответ (иначе говоря, завершила свою работу), событийный цикл после этого передает контроль выполнения обратно в функцию, откуда была вызвана первая корутина, т.е. в waste_time(),, она продолжает свое выполнение и выводит на печать "End work!". Сразу за ней событийный цикл получил такие же уведомления от остальных корутин (через механизм мониторинга, само собой), ибо они тоже закончили свое выполнение (все почти одновременно), и с ними повторяется такой же процесс. Поэтому после первой корутины мы также видим подряд вывод всех остальных - "End work!".

    А команда await, в цикле в функции main(), из-за того что не находится в таске - не участвует в очереди, поэтому она просто встает в ожидание результата корутины, вместо того, чтобы переключится на другие.

    Прокомментируйте пожалуйста сложившееся у меня представление, описанное выше
    Написано
  • Как работает запуск корутин в asyncio?

    @3FANG Автор вопроса
    Everything_is_bad, это все?
    Написано
  • Как работает запуск корутин в asyncio?

    @3FANG Автор вопроса
    хорошо, но можешь объяснить подробнее? Я изучал асинхронность сначала на генераторах(lang="python">yield from, модуль selectors, делегирующие генераторы и подгенераторы), потом библиотеку asyncio. Ощущение, будто я упускаю что-то очевидное.

    И почему тогда вывод получается такой:
    6659bcfab9039561580467.png
    Разве он не должен идти в таком порядке:
    Start work...
    Start work...
    Start work...
    Start work...
    Start work...
    Start work...
    Start work...
    Start work...
    Start work...
    Start work...
    старт
    End work!
    финиш
    старт
    End work!
    финиш
    старт
    End work!
    финиш
    старт
    End work!
    финиш
    старт
    End work!
    финиш
    старт
    End work!
    финиш
    старт
    End work!
    финиш
    старт
    End work!
    финиш
    старт
    End work!
    финиш
    старт
    End work!
    финиш
    2.0058696269989014
    Написано
  • Как работает запуск корутин в asyncio?

    @3FANG Автор вопроса
    Ведь и там, и там цикл, но почему. если я запускаю корутину сразу, то контроль выполнения не возвращается, а если собрать их в список и только потом запустить каждую, то возвращается?
    Написано
  • Как перейти на пользовательскую модель User в середине проекта?

    @3FANG Автор вопроса
    Everything_is_bad, с этого стоило начинать. Решил проблему
    Написано
  • Как перейти на пользовательскую модель User в середине проекта?

    @3FANG Автор вопроса
    Everything_is_bad, так, я перед прочтением твоего комментария случайно опытным путем пришел к тому, что python3 manage.py makemigrations работает, а через django-admin makemigrations - нет, все те же ошибки. Это что такое?
    Написано
  • Как перейти на пользовательскую модель User в середине проекта?

    @3FANG Автор вопроса
    Everything_is_bad, я не понимаю, ощущение будто он просто не может прочитать settings.py.
    Я попробовал и заново создать проект с приложениями, скопировав весь код из файлов. И клонировать репозиторий с предыдущего коммита. Все также.
    Такая же ошибка django.core.exceptions.ImproperlyConfigured, только меняются глобальные переменные, например:
    django.core.exceptions.ImproperlyConfigured: Requested setting USE_I18N, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.

    Вместо CACHES теперь USE_I18N
    Написано
  • Как перейти на пользовательскую модель User в середине проекта?

    @3FANG Автор вопроса
    я нашел статью, вроде бы объясняющую как это сделать - How to Switch to a Custom Django User Model Mid-Project. Но я уже применил migrate после создания начальной миграции с помощью makemigrations, тем самым создал зависимости в базе и просто так изменить или удалить запись django_content_type или django_migrations не получится.
    Поэтому я думаю откатиться до соответствующего коммита, создать новую ветку и пробовать повторить все как в статье.
    Ты можешь объяснить в чем суть самой ошибки, которая у меня появилась?
    Написано
  • Как сохранить данные в полях формы при повторном запросе?

    @3FANG Автор вопроса
    Спасибо, работает.
    Сделал так:
    def get_initial(self):
            """Возвращает исходные данные для формы."""
            initial = {
                'status': self.request.GET.get('status'),
                'executor': self.request.GET.get('executor')
            }
            return initial

    может быть можно или нужно было лаконичнее?
    Написано