Я немного озадачен тем, как писать асинхронный код в python/twisted. Предположим (для аргументов) я подвергаю функцию миру, который примет число и вернет True/False, если он является простым/неправым, поэтому он выглядит примерно так:
def IsPrime(numberin):
for n in range(2,numberin):
if numberin % n == 0: return(False)
return(True)
(просто для иллюстрации).
Теперь можно сказать, что есть веб-сервер, который должен вызывать IsPrime на основе представленного значения. Это займет много времени для больших numberin
.
Если в то же время другой пользователь запрашивает простоту небольшого числа, существует ли способ запуска двух вызовов функций асинхронно с использованием архитектуры реактора/отсрочки, чтобы результат короткого вычитания возвращался до результата длинный calc?
Я понимаю, как это сделать, если функциональность IsPrime поступает с какого-то другого веб-сервера, на который мой веб-сервер будет делать отложенный getPage, но что, если это просто локальная функция?
т.е. может ли Twisted как-то разделить время между двумя вызовами на IsPrime или потребовать явного вызова нового потока?
Или, должен ли цикл IsPrime быть помещен в серию меньших петель, чтобы можно было быстро вернуть управление в реактор?
Или что-то еще?