Теперь я понимаю, как это сделать, чтобы возобновить проблему: у меня есть основная программа, работающая в фоновом режиме, и у этой основной программы есть несколько потоков.Но я хочу с помощью другого скрипта или программы остановить основную программу с потоками более безопасно, а в некоторых случаях приостановить и возобновить потоки.
У меня не было правильного представления о том, как использовать потоки.Я могу остановить или отправить сигнал этим потокам из основной программы How ?, с базой данных или файлом конфигурации.
Я обновил свой проект с такими изменениями:
import threading
import time
import sqlite3
def fun1(stop_event1):
while not stop_event1.is_set():
print("Thread 1")
time.sleep(1)
def fun2(stop_event2):
while not stop_event2.is_set():
print("Thread 2")
time.sleep(1)
def fun3(stop_event3):
while not stop_event3.is_set():
print("Thread 3")
time.sleep(1)
def main():
stop_event1 = threading.Event()
thread1 = threading.Thread(target=fun1, args=(stop_event1,))
thread1.daemon = True
thread1.start()
stop_event2 = threading.Event()
thread2 = threading.Thread(target=fun2, args=(stop_event2,))
thread2.daemon = True
thread2.start()
stop_event3 = threading.Event()
thread3 = threading.Thread(target=fun3, args=(stop_event3,))
thread3.daemon = True
thread3.start()
while True:
print("------------")
print("Main program")
print("------------")
time.sleep(3)
if alive_main():
print("Finish Threads")
stop_event1.set()
stop_event2.set()
stop_event3.set()
print("Bye")
break
def alive_main():
conn = sqlite3.connect('example.db')
c = conn.cursor()
c.execute('SELECT alive_main FROM config')
row = c.fetchone()
if row[0] == 1:
return True
else:
return False
if __name__ == '__main__':
try:
main()
except (KeyboardInterrupt, SystemExit):
print("Terminated")
Если я хочу изменить с помощьюдругой класс или сценарий - состояние моих потоков, я просто изменяю конфигурационную таблицу в моей базе данных, и это вступает в силу в Потоках из основной функции.В этом примере, если я правильно остановлю свои потоки и программу, просто обновлю таблицу, вот и все.
sqlite> UPDATE config SET alive_main = 1;
Мне нужно прочитать о Signals и Условных объектах , чтобы дополнитьправильно темы использует.
Спасибо всем!