Как правильно запустить фоновую задачу внутри класса

Я новичок в программировании 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)


Ответы (0 шт):