Проблема алгоритма Python?

У меня есть функция 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 / параллельные вычисления и т. Д. Для решения этой проблемы. Цель здесь - увидеть, есть ли какой-нибудь метод программирования или шаблон проектирования , который можно легко использовать для решения таких проблем.

5
задан user3262424 20 July 2011 в 22:29
поделиться