Как правильно запустить фоновую задачу внутри класса
Я новичок в программировании python
Есть такой код, он инициализирует два класса, которые в фоне обрабатывают какие-то данные, а основной поток в это же время реагирует на команды от пользователя в консоли
При получении сигнала ctrl+c фоновые потоки проходят свой цикл до конца и после этого завершаются, но переменные class1.closed и class2.closed остаются false в main.py
Насколько я понял при создании нового процесса self клонируется и значения параметров в разных процессах не имеют связи между собой
Как можно корректно завершить фоновые процессы по нажатию ctrl+c. И как сделать чтобы self не раздваивался при создании фонового процесса?
#file1.py
class nameofclass:
#...
def summ(self,x,y):
return x+y+self.b
def close(self)
self.close_var = True
def run(self):
signal.signal(signal.SIGINT, self.close)
while not self.close_var:
self.result1 = self.readFromFileA()
self.result2 = self.doSomeStuffWithBAndResult1()
self.writeToFileC(result2)
time.sleep(10)
self.closed = True
def __init__(self,a,b,c):
self.a = a
self.b = b
self.c = c
self.close_var = False
self.closed = False
self.result1 = None
self.result2 = None
self.run()
self.__backgroundproccess = multiprocessing.Process(target=self.run,args=())
self.__backgroundproccess.start()
#main.py
import nameofclass from file1
import signal
def shutdown(class1,class2):
print('cleaning up resources')
while not class1.closed or not class.2.closed:
time.sleep(1)
print('program finished')
exit(0)
a1='a1'
b1='b1'
c1='c1'
a2='a2'
b2='b2'
c2='c2'
class1 = nameofclass(a1, b1, c1)
class2 = nameofclass(a2, b2, c2)
signal.signal(signal.SIGINT, shutdown)
close = False
while not close:
command = input()
if command == 'command1':
result = class1.summ(1,2)
elif command == 'command2':
result = class2.summ(1,2)
elif command == 'command3':
result = f"{class1.result2} {class2.result2}"
else:
continue
print(result)