Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 3, 2016 21:30:59

Megido
От:
Зарегистрирован: 2010-03-26
Сообщения: 31
Репутация: +  0  -
Профиль   Отправить e-mail  

консольное приложение в multiprocessing и SIGINT

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 решает что трек доигрался и идет дальше по циклу :/



Отредактировано Megido (Июнь 3, 2016 21:59:38)

Офлайн

#2 Июнь 3, 2016 22:04:45

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

консольное приложение в multiprocessing и SIGINT

Ну например проанализировать return code.



Офлайн

#3 Июнь 3, 2016 22:09:15

Megido
От:
Зарегистрирован: 2010-03-26
Сообщения: 31
Репутация: +  0  -
Профиль   Отправить e-mail  

консольное приложение в multiprocessing и SIGINT

я вот нашел пару вариантов для решения проблемы, но

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



Отредактировано Megido (Июнь 3, 2016 22:11:26)

Офлайн

#4 Июнь 4, 2016 16:25:35

sander
Зарегистрирован: 2015-02-19
Сообщения: 317
Репутация: +  53  -
Профиль   Отправить e-mail  

консольное приложение в multiprocessing и SIGINT

Megido
какой смысл пула если потом используется subprocess? создаем процессы, что бы создавать процессы?
собираем созданные процессы в список и вешаем обработчик для signal.SIGINT, в котором убиваем дочерние процессы

Офлайн

#5 Июнь 4, 2016 23:02:53

Megido
От:
Зарегистрирован: 2010-03-26
Сообщения: 31
Репутация: +  0  -
Профиль   Отправить e-mail  

консольное приложение в multiprocessing и SIGINT

sander
Megidoкакой смысл пула если потом используется subprocess? создаем процессы, что бы создавать процессы?собираем созданные процессы в список и вешаем обработчик для signal.SIGINT, в котором убиваем дочерние процессы
затем что эти два процесса должны выполнятся паралельно

вообщем не важно уже. переписал на голых плюсах за пару часов, все как часики работает и прога 500кб весит



Офлайн

#6 Июнь 5, 2016 15:14:14

sander
Зарегистрирован: 2015-02-19
Сообщения: 317
Репутация: +  53  -
Профиль   Отправить e-mail  

консольное приложение в multiprocessing и SIGINT

Megido
делаем 2 раза Popen, делов то

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version