Python - Запуск функции в отдельном потоке, затем доступ к ней - PullRequest
0 голосов
/ 28 октября 2018

Итак, у меня есть код Python, работающий с одной очень дорогой функцией, которая иногда выполняется по требованию, но ее результат не нужен сразу (его можно отложить на несколько циклов).

def heavy_function(arguments):
    return calc_obtained_from_arguments

def main():
    a = None
    if some_condition:
        a = heavy_function(x)
    else:
        do_something_with(a)

Дело в том, что всякий раз, когда я вычисляю heavy_function, остальная часть программы зависает.Тем не менее, мне нужно, чтобы он работал с пустым значением a, или лучше сообщить ему, что a обрабатывается отдельно и, следовательно, не должен быть доступен.Как я могу переместить heavy_function в отдельный процесс и продолжать вызывать основную функцию все время, пока не будет выполнена функция heavy_function, затем прочитать полученное значение и использовать его в основной функции?

1 Ответ

0 голосов
/ 29 октября 2018

Вы можете использовать простую очередь.

  1. Поместите ваш heavy_function в отдельный процесс, который бездействует, пока нет входных данных во входной очереди.Используйте Queue.get(block=True) для этого.Поместите результат вычисления в другую очередь.
  2. Запустите обычный процесс с пустым значением a и время от времени проверяйте пустоту выходной очереди.Возможно, используйте while Queue.empty(): здесь.
  3. Если элемент становится доступным, потому что ваш heavy_function завершен, переключитесь на вычисление со значением a из вашей очереди вывода.
...