Rumah > Artikel > pembangunan bahagian belakang > Mengapakah `threading.Timer` Menimbulkan `RuntimeError` Apabila Berulangkali Dimulakan?
Menelir dengan Pemasa Berulang
Untuk melaksanakan fungsi secara berkala setiap 'n' saat, kelas Python threading.Timer menawarkan penyelesaian praktikal . Walau bagaimanapun, menggunakan pemasa ini boleh menjadi rumit apabila anda perlu memulakan, menghentikan dan menetapkannya semula berulang kali.
Andaikan anda ingin menghidupkan fungsi setiap 0.5 saat. Anda boleh mencuba perkara berikut:
import threading def function_to_execute(): # Your function code here t = threading.Timer(0.5, function_to_execute) while True: t.cancel() t.start()
Walau bagaimanapun, kod ini akan menimbulkan RuntimeError, mengeluh tentang memulakan urutan lebih daripada sekali. Mengapa begitu?
Secara lalai, kaedah mula() bagi benang pemasa hanya boleh dipanggil sekali. Tetapi memandangkan kami membatalkan dan memulakan semula pemasa berulang kali, kami menghadapi masalah ini.
Mencipta Benang Pemasa Boleh Digunakan Semula
Untuk mengatasi had ini, pendekatan yang lebih baik ialah untuk memulakan benang pemasa sekali sahaja. Di dalam urutan, kami akan melaksanakan pelaksanaan fungsi berulang:
import threading class MyThread(threading.Thread): def __init__(self, event): threading.Thread.__init__(self) self.stopped = event def run(self): while not self.stopped.wait(0.5): # Execute your function here # Create a stop event stopFlag = threading.Event() # Start the timer thread thread = MyThread(stopFlag) thread.start()
Dengan persediaan ini, utas pemasa akan melaksanakan fungsi secara berterusan setiap 0.5 saat. Untuk menghentikan pemasa, hanya tetapkan acara stopFlag:
# Stop the timer stopFlag.set()
Menggunakan kaedah ini, anda boleh berulang kali memulakan, menghentikan dan menetapkan semula pemasa mengikut keperluan, tanpa menghadapi RuntimeError.
Atas ialah kandungan terperinci Mengapakah `threading.Timer` Menimbulkan `RuntimeError` Apabila Berulangkali Dimulakan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!