Задать вопрос
  • Что нужно знать дизайнеру мобильных приложений?

    @mamkaololosha
    1) Возьмите лист a4
    2) Сложите в 1/4
    3) Нарисуйте ручкой интерфейс для какой-нибудь несуществующие соц-сети
    Ответ написан
    Комментировать
  • Как узнать какие потоки "живые" (QThread, PyQT5)?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    Лучше хранить где-нибудь коллекцию запущенных потоков. Или как минимум задавать родительский объект при создании QThread, тогда можно получить список так: threads = someParentObject.findChildren(QThread)
    Ответ написан
    Комментировать
  • Могу ли я вызвать исключение из потока A в потоке B?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    Нет никакого способа сделать это средствами языка, но можно с помощью хака, использующего Cишное API CPython:
    import ctypes
    import threading
    import time
    
    
    def raise_async(thread, exception):
        if thread.ident is None:
            raise ValueError('Поток не запущен')
        r = ctypes.pythonapi.PyThreadState_SetAsyncExc(thread.ident, ctypes.py_object(exception))
        if r == 0:
            raise ValueError('Неправильный идентификатор потока')
        elif r > 1:
            ctypes.pythonapi.PyThreadState_SetAsyncExc(thread.ident, 0)
            raise SystemError('Неожиданное состояние среды выполнения')
    
    
    def f():
        print('Поток запущен')
        try:
            while True:
                time.sleep(1)
        except ZeroDivisionError:
            print('Эй! Я же ничего не делил!')
    
    
    if __name__ == '__main__':
        t = threading.Thread(target=f)
        t.start()
    
        time.sleep(3)
        raise_async(t, ZeroDivisionError)
    
        t.join()

    Правда не факт, что поможет. Если поток заблокировался на вводе/выводе, то виртуальная машина просто не будет делать проверку исключений.

    И повторюсь, что вашу проблему наверняка можно решить каким-нибудь иным, более правильным способом.
    Ответ написан
    1 комментарий