Multiprocessing Capture Signaux
Bonjour,
Je m'amuse toujours avec le multiprocessing, et je tente maintenant de le tuer convenablement (même les process ont le droit à une belle mort).
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| from multiprocessing import Process,Pool,Queue
import time
def f(Multi_Queue):
while not Multi_Queue.empty():
name=Multi_Queue.get()
print 'hello', name
time.sleep(4)
print 'bye', name
#if catch ctrl+c
def signal_handler(signal,frame):
'''
if it catch any ctrl+c it try to finish correctly
'''
print '''please wait during the programme end'''
p.terminate()
exit()
if __name__ == '__main__':
signal.signal(signal.SIGINT, signal_handler)
Test_Queue=Queue()
Test_Queue.put('jeanne')
p = Process(target=f, args=(Test_Queue,))
p.start()
p.join() |
Je lance donc un process et si vient un ctrl+c je veux ecrire une chaine de caractère avant.
Cependant avec ce code, le main comprend bien la chose, mais le process tente de faire pareil (et de s'auto-tuer) ce qui fait planter le programme.
Aussi quelqu'un connait il un moyen de terminer ca joliement sans un vilain message d'erreur à la fin ?
EDIT : toujours python 2.7 sous Debian Lenny