@r1dddy4sv

Multiprocessing вызвать ошибку внутри process?

Можно ли как то остановить Process, вызвав ошибку?
Дело в том, что по окончанию работы сессии multiprocess.Process, я бы хотел чтобы выполнялось действие, показанное в finally:
def drop(args):
    try:
         # do something
         driver=**anything**
         #do something 
    except:
          pass
    finally:
         driver.do_anything()


На данный момент я останавливаю работу сессии следующим образом:
s.terminate()
s.join() 
#Здесь должно выполнится driver.do_anything()


Можно ли как то вызвать ошибку внутри сессии, что бы условие finally или except было выполнено?

Спасибо
  • Вопрос задан
  • 61 просмотр
Решения вопроса 1
lxstvayne
@lxstvayne
Люблю Python
Можешь написать кастомный процесс с использованием контекстного менеджера.
Метод __enter__() выполняется на старте, а __exit__() всегда на выходе из контекстного менеджера, ты можешь отловить в нём свои ошибки и сделать необходимые действия.
from multiprocessing import Process


class CustomProcess(Process):
    def __init__(self):
        super().__init__()

    def __enter__(self):
        return self

    def __exit__(self, exc_type, exc_val, exc_tb):
        print(exc_type, exc_val, exc_tb)
        print("Посмертное действие")


if __name__ == '__main__':
    with CustomProcess() as process:
        raise Exception("Some Value")
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
drygdryg
@drygdryg
Python-разработчик
Создайте пользовательское исключение и бросьте его в блоке try:
class MyException(Exception):
    pass


def drop(args):
    try:
         # do something
         driver=**anything**
         #do something 
         raise MyException
    except MyException:
          pass
    finally:
         driver.do_anything()
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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