Сложная параллельная последовательность Фибоначчи в Python и POST-запросах от приложения реакции - PullRequest
0 голосов
/ 11 февраля 2020

Итак, я уже некоторое время ищу работу программиста и, наконец, нашел компанию, которая дала мне шанс. У меня нет тонны практического опыта в Python и Javascript, но я начал активно изучать JS несколько месяцев go, поэтому я могу обновить свою веб-разработку (уже знаю CSS и HTML).

Они дали мне задание, которое я не могу полностью обдумать ... Они хотят, чтобы я внедрил автономный веб-сервис в python, и простой веб-сайт, который использует это служба. Под автономным сервисом они подразумевают, что он существует в форме, которую можно запустить из командной строки, а не внутри существующего веб-сервера, такого как apache или nginx (я полагаю, что я могу сделать это локально в любом случае, верно? Они будут возможно, только проверяйте код.).

Служба должна быть реализована в Python как HTTP-сервер, существующие модули, которые поставляются с python (например, http.server). Для вызова службы должен использоваться метод POST, служба принимает параметр "fibIndex". Служба должна возвращать число Фибоначчи в последовательности, указанной в ответе «fibIndex», например, число с нулевым индексом равно 1, первое равно 1, второе равно 2 ... Служба не хранит предварительно вычисленную таблицу Фибоначчи числа, но всегда рассчитывает их, когда он их использует. Служба допускает множественные одновременные вызовы (или вызовы служб), гарантируя, что ровно один расчет числа Фибоначчи (а не множественные одновременные вычисления) выполняется таким образом, что речь идет о совместном использовании промежуточных результатов всех вызовов службы в пределах одного Расчет чисел Фибоначчи.

Примеры:

1) Для вызова A требуется fibIndex = 12, и, поскольку вычисления не выполняются, запускаются вычисления, а вызов B происходит позже (когда вычисления находится в fibIndex = 4) и требует fibIndex = 18 и ждет, пока A получит результат 233, а вычисление продолжается до fibIndex = 18, после чего B набирает 4181.

2) Для вызова A требуется fibIndex = 20 и так как вычисление не выполняется, оно запускает вычисление, и вызов B приходит позже (когда вычисление находится в fibIndex = 14) и требует fibIndex = 8 и немедленно возвращает результат 34, поскольку он уже был вычислен как часть вычисление результата для A, а затем, когда происходит вычисление fibIndex = 20, A получает оценку 10946.

3) Аналогично 2), но B требует fibIndex = 16, и в этом случае B ожидает для существующего вычисления, чтобы достичь fibIndex = 16, возвращает 1597, а затем A возвращает 10946, когда вычисление достигает fibIndex = 20. Как только все t он отвечает на звонки, расчет заканчивается, а любые промежуточные результаты «забываются». Пересчет начинается только тогда, когда снова приходит следующий звонок. Служба также должна управлять веб-сайтом служебного набора, описанным ниже как сайт c.

Итак, я написал программу, которая принимает параметр fibIndex и возвращает номер Fib по указанному индексу.

Мой друг сказал мне, может быть, мне стоит подумать об использовании очереди с приоритетами. Одним из других вариантов, которые я нашел, была многопоточность. Я также не совсем понимаю, чего хочет мой потенциальный работодатель. Если вызов B поступит позже, вам придется вначале ввести больше параметров, поскольку вы не можете на самом деле превысить скорость компьютера и отправить еще один запрос POST, добавив второй номер в (я думаю, он хочет, чтобы он мог сделать это теоретически. ..). Я вроде знаю, как бы решить эту проблему, если A> B. Я бы заполнил массив первым или некоторое время l oop первым запросом, а затем проверил, есть ли введенный индекс в массиве, и вернул его. Я думаю, я мог бы также взять последние два индекса в массиве и продолжить вычисление с того места, где закончил A, если A fibArray = [1,1] inProcess = False def inArray(fibIndex): if len(fibArray) >= fibIndex: return True else: return False def fibFunction(fibIndex): global fibArray global inProcess inProcess = True while len(fibArray) <= fibIndex: last = fibArray[-2:] result = last[0] + last[1] fibArray.append(result) inProcess = False return fibArray[fibIndex] def main(fibIndex): global inProcess if inArray(fibIndex): return fibArray[fibIndex] while inProcess: if inArray(fibIndex): return fibArray[fibIndex] return fibFunction(fibIndex) fibIndex = int(input('index to get: '))-1 print(main(fibIndex)) Надеюсь, кто-нибудь может помочь мне закончить это или дать мне несколько советов. Я действительно хочу эту работу, и я готов учиться чему угодно.

Заранее спасибо! Ура!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...