Код выхода потока Python

Вы не можете оптимизировать его, изменив его на while.

Вы можете просто увеличить скорость очень, очень, очень мало, изменив линию

for (int k = 0; k < length - 1; k++) {

на

for (int k = 0; k < lengthMinusOne; k++) {

, где lengthMinusOne вычисляется до

, это вычитание равно просто вычисляю почти (200x201 / 2) x (200-1) раз, а для компьютера это очень мало:)

12
задан Noldorin 12 June 2009 в 13:40
поделиться

3 ответа

Как уже упоминалось, оболочка вокруг класса Thread может уловить это состояние. Вот пример.

>>> from threading import Thread
>>> class MyThread(Thread):
    def run(self):
        try:
            Thread.run(self)
        except Exception as err:
            self.err = err
            pass # or raise err
        else:
            self.err = None


>>> mt = MyThread(target=divmod, args=(3, 2))
>>> mt.start()
>>> mt.join()
>>> mt.err
>>> mt = MyThread(target=divmod, args=(3, 0))
>>> mt.start()
>>> mt.join()
>>> mt.err
ZeroDivisionError('integer division or modulo by zero',)
16
ответ дан 2 December 2019 в 20:19
поделиться

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

Однако вам необходимо защитить эту переменную мьютексом или семафором. Или вы можете убедиться, что только один поток когда-либо будет писать в него, а все остальные просто прочитают его.

0
ответ дан 2 December 2019 в 20:19
поделиться

Пусть ваша функция потока перехватит исключения. (Вы можете сделать это с помощью простой функции-оболочки, которая просто вызывает старую функцию потока внутри try ... за исключением или try ... кроме блока ... else ). Тогда вопрос просто сводится к «как передавать информацию из одного потока в другой», и я думаю, вы уже знаете, как это сделать.

0
ответ дан 2 December 2019 в 20:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: