Aşağıdaki kodu bu link numaralı telefondan ilk yanıttan değiştirdim.Python uyurken bir iş parçacığı sonlandır
class StoppableThread(threading.Thread):
"""Thread class with a stop() method. The thread itself has to check
regularly for the stopped() condition."""
def __init__(self, target, timeout):
super(StoppableThread, self).__init__()
self._target = target
self._timeout = timeout
self._stop = threading.Event()
self.awake = threading.Event()
def run(self):
while(not self._stop.isSet()):
self.awake.clear()
time.sleep(self._timeout)
self.awake.set()
self._target()
def stop(self):
self._stop.set()
def stopped(self):
return self._stop.isSet()
Ben bu sınıfın bir örneğini oluşturmak ve süreci deamon olarak ayarlayın sonra bunu daha sonra _target()
işlevi tamamlamak ve için iplik uyurken başka, daha sonraki bir zamanda sonlandırmak beklemek istiyorum sonlandırabilir. İkinci durumu durma yöntemini arayarak halledebilirim. Ancak, _awake
olay nesnesi False
olarak ayarlandığında onu sonlandırma hakkında hiçbir fikrim yok. Birisi lütfen yardım edebilir mi?
Ben senin noktaya değindi. Şimdi, 'hedef' işlevinin sonsuz uzun süre çalışıp çalışmadığını söyleyin, onu nasıl incelerim? MySQL DB işlemlerini içerdiğinden dolayı incelikle sonlandırmalıyım. Yukarıdaki işlev gibi, zaman aşımı saniyesinden sonra periyodik olarak 'target' işlevini çalıştırabilen bu işlev için herhangi bir zaman aşımı koşulum yok. Bu işlev için bir sürücü işlevi oluşturur, sürücü işlevini yeni bir iş parçacığından çalıştırır ve '_stop' olay bayrağını yukarıdaki iş parçacığından geçirir mi? Yoksa daha iyi bir yolu var mı? – zorro
@zorro, bu tamamen farklı bir soru olduğundan, yeni bir soru yayınlamalısınız (kural her posta başına bir sorundur) – shx2
Tamam teşekkürler. Yapacağım. – zorro