Я пытаюсь выполнить программу, которая выполняет часть кода таким образом, что пользователь может остановить его выполнение в любое время без остановки основной программы. Я думал, что могу сделать это, используя threading.Thread, но затем я запустил следующий код в IDLE (Python 3.3):
from threading import *
import math
def f():
eval("math.factorial(1000000000)")
t = Thread(target = f)
t.start()
Последняя строка не возвращается: я в конце концов перезапустил оболочку. Является ли это следствием блокировки Global Interpreter Lock, или я делаю что-то неправильно? Я не видел ничего конкретного в этой проблеме в документации по потокам (http://docs.python.org/3/library/threading.html)
Я попытался сделать то же самое, используя процесс:
from multiprocessing import *
import math
def f():
eval("math.factorial(1000000000)")
p = Process(target = f)
p.start()
p.is_alive()
Последняя строка возвращает False, хотя я запускал ее только через несколько секунд после начала процесса! Основываясь на использовании моего процессора, я вынужден сделать вывод, что этот процесс никогда не начинался. Может кто-нибудь объяснить, что я делаю неправильно здесь?