Если вы действительно хотите, чтобы ваша функция работала и по-прежнему требуется ввод данных пользователем (или системой), у вас есть два решения:
- Многопоточной
- многозадачность
Это будет зависеть от того, насколько хорошо взаимодействие. Если вы просто хотите прервать функцию и не заботиться о выходе, тогда многопроцессорность подойдет.
В обоих случаях вы можете полагаться на некоторые общие ресурсы (файл или общую память для многопоточности, переменную с соответствующим мьютексом для многопоточности) и регулярно проверять состояние этого ресурса в своей функции. Если он настроен на то, чтобы сказать вам выйти, просто сделайте это.
Пример для многопоточности:
from threading import Thread, Lock
from time import sleep
class MyFct(Thread):
def __init__(self):
Thread.__init__(self)
self.mutex = Lock()
self._quit = False
def stopped(self):
self.mutex.acquire()
val = self._quit
self.mutex.release()
return val
def stop(self):
self.mutex.acquire()
self._quit = True
self.mutex.release()
def run(self):
i = 1
j = 1
print i
print j
while True:
if self.stopped():
return
i,j = j,i+j
print j
def main_fct():
t = MyFct()
t.start()
sleep(1)
t.stop()
t.join()
print "Exited"
if __name__ == "__main__":
main_fct()