У меня есть функция python
(назовите ее myFunction
), которая получает в качестве входных список чисел , и после сложного вычисление, возвращает результат вычисления (который представляет собой число ).
Функция выглядит так:
def myFunction( listNumbers ):
# initialize the result of the calculation
calcResult = 0
# looping through all indices, from 0 to the last one
for i in xrange(0, len(listNumbers), 1):
# some complex calculation goes here, changing the value of 'calcResult'
# let us now return the result of the calculation
return calcResult
Я проверил функцию, и она работает, как ожидалось.
Обычно myFunction
предоставляется аргумент listNumbers
, содержащий в нем 5 000 000 элементов. Как и следовало ожидать, расчет требует времени. Мне нужно, чтобы эта функция работала как можно быстрее.
Здесь возникает проблема : предположим, что время сейчас 5 утра, и что listNumbers
содержит только 4,999,999 значений. . Это означает, что его ПОСЛЕДНЕЕ ЗНАЧЕНИЕ еще не доступно . Это значение будет доступно только в 6 утра .
Очевидно, мы можем сделать следующее ( 1-й режим ): дождаться 6 утра . Затем добавьте последнее значение в listNumbers
, а затем запустите myFunction
. Это решение работает, НО пройдет некоторое время , прежде чем myFunction
вернет наш вычисленный результат (так как нам нужно обработать весь список чисел , начиная с первого элемента на). Помните, наша цель - получить результаты как можно скорее после 6 утра .
Я думал о более эффективном способе решения этой проблемы ( 2-й режим ): поскольку (at 5 утра) у нас есть listNumbers
со значениями 4,999,999 в нем, давайте сразу же приступим к выполнению myFunction
. Давайте обработаем все, что сможем (помните, у нас еще нет последней части данных), а затем - ровно в 6 утра - «подключим» новую часть данных - и сгенерируем вычисленный результат. Это должно быть значительно быстрее, так как большая часть обработки будет выполняться ДО 6 часов утра, следовательно, нам придется иметь дело только с новыми данными - это означает, что вычисленный результат должен быть доступен сразу после 6 утра .
Предположим, что у нас нет возможности проверить код myFunction
или изменить его. Есть ли ЛЮБАЯ методика программирования / идея дизайна, которая позволит нам взять myFunction
КАК ЕСТЬ и что-то сделать с ней (без изменения ее кода), чтобы мы могли ее получить? работать в 2-м режиме , а не в 1-м ?
Не предлагайте использовать c ++
/ numpy + cython
/ параллельные вычисления
и т. Д. Для решения этой проблемы. Цель здесь - увидеть, есть ли какой-нибудь метод программирования или шаблон проектирования , который можно легко использовать для решения таких проблем.