Допустим, у меня есть multiprocessing.Pool
экземпляр, в котором N одновременно работающих. Каждый рабочий звонит subprocess.Popen(...)
и запускает какие-то вещи. Таким образом, рабочий управляет как минимум двумя процессами: самим рабочим процессом и порожденным им подпроцессом, а также всеми подпроцессами, которые порождает этот подпроцесс.
Как отслеживать время выполнения этого подпроцесса (и любых подпроцессов, которые этот подпроцесс порождает, если таковые имеются) у каждого работника и выдавать ошибку, когда она истекает?
Кажется, threading.Timer
не работает, потому что подсчитывает время, даже когда подпроцесс выгружается из ЦП (т.е. не работает).
signal.setitimer
тоже не работает, потому что все его опции (PROF, VIRTUAL, REAL) не могут возвращать фактическое время выполнения этого подпроцесса и его подпроцессов (PROF и VIRTUAL: только отслеживает время выполнения сам вызывающий процесс, а не подпроцессы, которые он породил; REAL: отсчитывает время, даже когда вызывающий процесс и его подпроцессы не запущены).
Python2.7-only, пожалуйста (я не могу выбрать, извините ..)