Benzer bir sorunla karşılaştım, en ideal cevap değil, ama sizin için bunu açıklayacağım ve belki de bunun üzerinde çalışabilirsiniz.
Mini hata ayıklayıcım daha çok veya daha az yazdım. Udp İstemcisi/Sunucusu ve bir şey yapmayan ancak global bir kilit yakalayan bir işlev, uyku .1 saniye ve sonra serbest bırakın. Bu işlev her iş parçacığına geçti. Ardından, hata ayıklamak istediğim kritik alanlar arasında bu işleve bir çağrı koydum. Programı başlattıktan sonra, udp sunucusu istemciyi dinlerdi ve "duraklat" yazmış olsaydım, paylaşılan işlev tarafından kullanılanla aynı genel kilidi alır ve istemciye "oynat" yazana kadar pes etmem. Bu yüzden, uygulamaya bağlı olarak, oldukça sıkı bir duruş sağlayabilirsiniz.
Yardımcı olur umarım ... Aşağıdaki küçük parçacık. Uygulamam bir test platformuydu, bu yüzden yaptığım şey temel sınıf yapıcısına işlev göstericisini ekliyordu ve bunu time.sleep() yerine kullanmakta kullanıyorum. Yapabildiğiniz şey, her iş parçacığına iletmek ve işlevlerinizin başında ve sonunda duraklatma işlevine çağrılar eklemek, ve kırmanıza izin verir vb. Bazı komutları kaldırdım ancak bunun olabileceğini görebilirsiniz. İhtiyacınız kadar kapsamlı yapılmış.
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()
pdb parçacıklı programları ayıklama desteklemez. Bu olsa PyDev ile çalışmalıdır. Ne tür bir problemi deneyimliyorsunuz? –