
Николай
26.12.2018
11:53:05
Сделать кастомный тип?
Там есть возможность предоперации?
Или есть некий превосходный тип, о котором я не в курсе?

Игорь
26.12.2018
11:53:56
def func2(*a, **kw):
try:
func(*a, **kw)
except:
return
def func():
return funcA()
def funcA():
return funcB()
def funcB():
return funcD()
def funcD():
raise Exception
Я хочу обработать непредвиденное исключение на месте в funcD и никуда ничего не поднимать и завершить работу скрипта

Google

Николай
26.12.2018
11:54:36

Tishka17
26.12.2018
11:55:21
где хочешь обработатьт - лови
хочешь выйти - кидай такое чтобы где обрабатывали только на самом верзху или нигде

Игорь
26.12.2018
11:58:02
короче, я справшивал, как завершить подпроцесс на месте и не повесить при этом родительский. Зачем мне это нужно за скобки. Если по существу нет ответа, понял, поищу в другом месте

Tishka17
26.12.2018
11:58:37
просто return в функции будет работать

Игорь
26.12.2018
11:59:30

Tishka17
26.12.2018
11:59:45
lf ,kby
да блин
чем не то?
ты хочешь завершить функцию - азвершай функцию
не хочешь завершать - не завершай
хочешь логику при завершении - сделай логику там где завершаешь

Google

Tishka17
26.12.2018
12:01:04
я все ещё не понимаю чем return не подходит

Николай
26.12.2018
12:01:35
Ты просто не Игорь, тебе не понять

Tishka17
26.12.2018
12:02:10
как понял, что я не Игорь?

Игорь
26.12.2018
12:02:15
не конфа, а смехопонарама
уморительно

Николай
26.12.2018
12:02:46

Tishka17
26.12.2018
12:03:23
нет, серьезно. Если решать задачу в лоб, как ты просишь, я дал совет. Если не в лоб - непонятно какие костыли ты хочешь и зачем именно костыли

Роман
26.12.2018
12:03:58
Короче, не удалось мне скудным своим умишкой постичь прелести псевдотерминалов, отказываются они со мной работать
но всем спасибо за попытки вбить знания в черепную коробку мне

Игорь
26.12.2018
12:06:38
Еще раз, в старом коде у меня где-то в глубине в одном спецефицеском месте выскакивает критическая ошибка. Для того, что бы обработать ее и сдеать return, мне нужно этот return прокидывть через семь слоев стека. Это критическая ошибка, мне нужно после ее возникновения просто убить подпроцесс и перейти к следующим данным из очереди в map

Николай
26.12.2018
12:07:20
найди где возникает ошибка да сделай except Error:
pass

Alex
26.12.2018
12:07:33

Николай
26.12.2018
12:07:33

Alex
26.12.2018
12:08:03
и в обработчике напиши return

Игорь
26.12.2018
12:08:11
Короче можно просто сказать есть способ убить подпроцесс или нет?

Tishka17
26.12.2018
12:08:17

Alex
26.12.2018
12:08:20

Игорь
26.12.2018
12:08:23
а не рассказывать мне, как написать код?

Google

Alex
26.12.2018
12:08:40
и тебе рассказывают как сделать правильно

Игорь
26.12.2018
12:09:36
хуйню или нет, я сам решу. а мне советуют хуйню вроде sys.exit() которая нихера не работает

Alex
26.12.2018
12:09:37
а ты продолжаешь упорствовать: "нет, я не хочу решать задачу, я хочу костылиЭ

Игорь
26.12.2018
12:09:40
короче ясно

Alex
26.12.2018
12:10:00

Игорь
26.12.2018
12:10:11

Tishka17
26.12.2018
12:10:15

Николай
26.12.2018
12:10:27
для подпроцесса вполне подойдёт на любом уровне вложенности
найди где возникает ошибка да сделай except Error:
pass

Игорь
26.12.2018
12:10:40
короче ладно, проехали

Николай
26.12.2018
12:10:50
Если даже это тебя не устроит - то...

Alex
26.12.2018
12:11:23
где-то в коде затесался except:

Игорь
26.12.2018
12:13:59

Tishka17
26.12.2018
12:14:03

Сергей
26.12.2018
12:15:38
а еще смешно читать обидки рандомного чувака в чатике, который пришел и требует решения

Игорь
26.12.2018
12:16:50
Да и нравоучения от рандомных чуваков в чатике это прям ТОП. В интернете кто-то не прав

Google

Alex
26.12.2018
12:16:54

Игорь
26.12.2018
12:16:55
Как вссегда
Вы чет упоролись, спросил вопрос. Дали не тот ответ, уточнил. Ни кто ответить не смог, началось: сделай по-другому, я бы сделал так. Только вот вопрос не о том был. Что я и уточнил. Если вы, многоуважаемые не можете дать ответ точно и начинаете тут сыпать своей эрудированностью по всему, что знаете, то это не ко мне. Мне ваша эрудированность не к селу не к городу.

Сергей
26.12.2018
12:19:48

Admin
ERROR: S client not available

Игорь
26.12.2018
12:20:03
Нет, они шутят про мое Имя
а не помогают решить проблему
Как бы все
До этого срача не было

Tishka17
26.12.2018
12:22:26
то есть raise + return все ещё не катит?
ну окей

Alex
26.12.2018
12:22:36

Tishka17
26.12.2018
12:22:58

Alex
26.12.2018
12:24:02
угу, raise + return - это наиболее корректный способ решить проблему
возвращаясь к sys.exit - покажи код
кстати если ты делал sys.exit(0) то пул мог не понять с какого перепугу дочерний процесс завершился корректно, что возможно привело к наблюдаемому зависанию.
нужно смотреть код пула

Andrew
26.12.2018
12:26:44

xOxXakerxOx
26.12.2018
12:34:52
Как запарсить sec на сайте "<p class="color-green f22 remain" sec="1545830893">-</p>"

Google

Alex
26.12.2018
12:35:49
да, действтиельно вызов sys.exit() из функции, которая выполняется в multiprocessing.Pool приводит к зависанию на этапе подчистки ресурсов пула.

Игорь
26.12.2018
12:36:55
Он тут желчью весь чатик забрызгал. Пусть лесом идет может?
Я, вот, честно, ни с кем ругаться не собирался. Просто, да, выбешивают шуточки в свой адрес не по теме. Всем, кто хотел помочь спасибо. Что сделать по другому можно, я знаю, придётся сделать так. Я хотел узнать именно то, что спрашивал. Именно это и ничего другого

Сергей
26.12.2018
12:38:07
где-то я такое видел, но не помню где (

Alex
26.12.2018
12:38:47
в общем судя по всему блокировка происходит где-то на попытке прочесть результат из очереди… TL;DR: выходить из процесса в пуле по sys.exit - очевидно хреновая идея.
деталей пока не знаю, интересно, но копаться в сорцах мультипроцессинга в выходной день лень
кстати это известный баг
https://bugs.python.org/issue22393

Макс
26.12.2018
12:52:18
в чем описание тесткейсов делать удобно?

Сергей
26.12.2018
12:54:24
ага, вроде нашел
они действительно общаются через пайпы на нижнем уровне
а вообще это называется менеджерами. они спавнят свой тред и там делают черную магию
вот если глянуть сюда multiprocessing.managers.BaseManager.start
там есть интересный код
self.shutdown = util.Finalize(
self, type(self)._finalize_manager,
args=(self._process, self._address, self._authkey,
self._state, self._Client),
exitpriority=0
)
то есть по идее перед sys.exit() надо найти этого менеджера и дернуть у него shutdown
multiprocessing.managers.BaseManager._finalize_manager оно вроде что-то отправит в мастер и тогда можно грохать.
чисто теоретически это должно помочь

Alex
26.12.2018
12:55:11
звучит как дичайший костыль

Сергей
26.12.2018
12:55:15
хмм, там внутри даже есть вызов process.terminate()

Alex
26.12.2018
12:55:28
проще уже exception прокинуть

Сергей
26.12.2018
12:55:38
ну да, человек просит костылей - вот, пожалуйста )

Alex
26.12.2018
12:55:43
оок