Tuve un problema similar, no es la respuesta más ideal, pero lo describiré para ti y quizás puedas resolverlo.
Más o menos escribí un mini depurador. Udp Client/Server y una función que no hizo nada más que tomar un bloqueo global, dormir .1 segundos y luego soltarlo. Esta función pasó a cada hilo. Luego puse una llamada a esta función entre las áreas críticas que quería depurar. Después de iniciar el programa, el servidor udp escucharía al cliente, y si escribiera "pausa", tomaría el mismo bloqueo global utilizado por la función compartida, y no lo abandonaría hasta que escribí "jugar" en el cliente. Haciendo esto, puede obtener una parada bastante ajustada ... dependiendo de la aplicación.
Espero que ayude ... Tiny snippet a continuación. Mi aplicación era para una plataforma de prueba, así que lo que hice fue agregar el puntero de función al constructor de la clase base, y usar esto en lugar de time.sleep() .. dándome una suave capacidad de búsqueda de errores. Lo que puede hacer es pasar esto a cada hilo y agregar llamadas a la función de pausa al principio y al final de sus funciones, y le permitiría romper, etc. Quité algunos de los comandos pero puede ver que esto puede ser hecho tan extenso como lo necesite.
PAUSE_NOW = thread.allocate_lock()
def pause(s):
'''
FUNCTION: testStatus
DESCRIPTION: function passed to all test objects
INPUTS: none
RETURNS: none
'''
global Pause_NOW
PAUSE_NOW.acquire()
time.sleep(s)
PAUSE_NOW.release()
`
def server():
'''
\r\n
FUNCTION: server
DESCRIPTION: UDP server that launches a UDP client. The client it
starts can issue commands defined in cmdlineop. Most
functions return a status, but some are meant to block
the main thread as a means of pausing a test, in which case
a default response is returned.
INPUTS: none
RETURNS: none
'''
global EXIT
global Pause_NOW
host = "localhost"
port = 21567
buf = 1024
addr = (host,port)
UDPSock = socket(AF_INET,SOCK_DGRAM)
UDPSock.bind(addr)
sleep(1)
os.startfile('client.py')
#os.system('start python client.py')
cmdlineop = {
'pausenow' : "PAUSE_NOW.acquire()",
'playnow' : "PAUSE_NOW.release()",
}
while 1:
output = 'RECEIVED CMD'
# if EXIT: break
data,addr = UDPSock.recvfrom(buf)
if not data:
break
else:
if cmdlineop.has_key(data.split()[0]):
exec(cmdlineop[(data.split()[0])])
UDPSock.sendto(('\n'+output+'\n'),addr)
data = ''
else:
UDPSock.sendto('INVALID CMD',addr)
UDPSock.close()
AP no admite la depuración de programas multihilo. Sin embargo, esto debería funcionar con PyDev. ¿Qué problema estás experimentando? –