Найти - Пользователи
Полная версия: консольное приложение в multiprocessing и SIGINT
Начало » Python для экспертов » консольное приложение в multiprocessing и SIGINT
1
Megido
def volume_control(VOLUME_CHANGE_TIME,level_per_second):
for vol in range(0,VOLUME_CHANGE_TIME):
subprocess.call(['nircmd','changesysvolume',str(level_per_second)])
sleep(1)
def play_audio(REPEATS,FILENAME):
for r in range(REPEATS):
p=subprocess.Popen(["ffplay", "-nodisp", "-autoexit", FILENAME])
print "start audio"
p.communicate()

if __name__ == "__main__":
pool.apply_async(play_audio,args=[REPEATS,FILENAME])
pool = multiprocessing.Pool(2, init_worker)
try:
pool.apply_async(volume_control,args=[VOLUME_CHANGE_TIME,level_per_second])
pool.apply_async(play_audio,args=[REPEATS,FILENAME])
pool.close()
pool.join()
except KeyboardInterrupt:
print "Caught KeyboardInterrupt, terminating workers"
pool.terminate()
pool.close()
pool.join()



пока не закончит свою работу ffplay он будет принимать SIGINT а мне надо чтоб его принял пул и потушил все таски.
как так сделать подскажите пожалуйста

кстати закрытие окна консоли тоже не завершает пул, subprocess решает что трек доигрался и идет дальше по циклу :/
doza_and
Ну например проанализировать return code.
Megido
я вот нашел пару вариантов для решения проблемы, но

def preexec(): # Don't forward signals.
os.setpgrp()
для unix
def preexec_function():
signal.signal(signal.SIGINT, signal.SIG_IGN)
my_process = subprocess.Popen(
["my_executable"],
preexec_fn = preexec_function
)
с этим вобще не запускается ffplay
походу тоже для unix
sander
Megido
какой смысл пула если потом используется subprocess? создаем процессы, что бы создавать процессы?
собираем созданные процессы в список и вешаем обработчик для signal.SIGINT, в котором убиваем дочерние процессы
Megido
sander
Megidoкакой смысл пула если потом используется subprocess? создаем процессы, что бы создавать процессы?собираем созданные процессы в список и вешаем обработчик для signal.SIGINT, в котором убиваем дочерние процессы
затем что эти два процесса должны выполнятся паралельно

вообщем не важно уже. переписал на голых плюсах за пару часов, все как часики работает и прога 500кб весит
sander
Megido
делаем 2 раза Popen, делов то
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB