Escribí un programa de prueba, que tiene dos procesos. El proceso padre obtiene datos de una cola y el niño ingresa datos en ella. Hay un controlador de señal que le dice al programa que salga. Sin embargo, no sale a veces cuando envío la señal SIGTERM al pid (proceso hijo) que imprimí, y parece estar teniendo un punto muerto.¿Por qué este programa python a veces no puede salir?
import os
import sys
import multiprocessing
import time
import signal
bStop = False
def worker(que):
signal.signal(signal.SIGTERM,sighandler)
print 'worker:',os.getpid()
for i in range(100000000):
que.put(i)
print 'STOP'
def sighandler(num,frame):
print 'catch signal'
q.put('STOP')
sys.exit(0)
q = multiprocessing.Queue(100)
p = multiprocessing.Process(target=worker,args=(q,))
p.start()
for item in iter(q.get,'STOP'):
print 'get',item
pass
print 'main stop'
p.join()
Wow ... con 100,000,000 no estabas bromeando sobre ese rango, ¿o sí? – cwallenpoole
@cwallenpoole Solo quiero que funcione por un largo tiempo .... – renenglish
Bueno, ha estado ejecutándose en segundo plano durante 20 minutos y no ha llegado a 50,000,000 aún – cwallenpoole