У меня проблема со следующим кодом. В моей реальной ситуации логика, инкапсулированная SomeClass, имеет блокирующую логику, поэтому мне нужно, чтобы она вызывалась с помощью reactor.callFromThread()
. Я хочу, чтобы цикл в SomeClass.run() останавливался, когда я выдаю сигнал sigint, и я понимаю, что добавление некоторого кода для этого в хук addSystemEvent должно справиться с этим. Я думаю, что это может быть больше проблемой с моим пониманием Python и потоковой передачи, чем с самим Twisted.
from twisted.internet import reactor
import time
class SomeClass():
def __init__(self):
self.running = False
def run(self):
self.running = True
while(self.running):
print('foo')
time.sleep(5)
def stop(self):
print('stopping')
self.running = False
someClassInstance = SomeClass()
def cleanup():
someClassInstance.stop()
reactor.addSystemEventTrigger('before', 'shutdown', cleanup)
reactor.callFromThread(someClassInstance.run)
reactor.run()