Задержка результата функции, в то же время возможность вызывать функцию и сделать результат доступным - PullRequest
1 голос
/ 09 ноября 2019

Я хочу, чтобы моя функция delayed_sum(value, delay) добавила value к глобальной переменной result с определенным delay в Python 3.x.

Идея состоит в том, чтобы связать мой код Python сЭлектрон должен иметь пользовательский интерфейс. Пользовательский интерфейс позволяет вам просматривать эту глобальную переменную с именем result и добавлять несколько value к result с определенной delay, выраженной в секундах. Я хотел бы, чтобы переменная result обновлялась, как только истекла задержка, и пока функция работает в фоновом режиме, все еще можно вызывать функцию.

Если у нас есть время в секундах, какследуйте:

  1. Инициализация от result до 0 и отображение 0 на вызываемом интерфейсе пользователя
  2. delayed_sum(5, 10). За 10 секунд добавьте 5 к результату
  3. Добавьте 5 за 9 секунд
  4. Добавьте 5 за 8 секунд
  5. Добавьте 5 за 7 секунд
  6. Добавьте 5 в6 секунд
  7. Добавить 5 за 5 секунд
  8. Добавить 5 за 4 секунды
  9. Добавить 5 за 3 секунды и delayed_sum(3, 5) вызвано. Через 5 секунд добавьте 3 к результату
  10. Добавьте 5 за 2 секунды, а через 4 секунды добавьте 3
  11. Добавьте 5 за 1 секунду и через 3 секунды добавьте 3
  12. result += 5 и пользовательский интерфейс отображает 5 и через 2 секунды добавляет 3
  13. Через 1 секунду добавляет 3
  14. result += 5, а пользовательский интерфейс отображает 8

Я пытался использовать time.sleep(), но панель управления зависает, и я не могу позвонить delayed_sum() во время выполнения первого delayed_sum.

import time
import threading

result = 0

def delayed_sum(value, delay):
    t = threading.Thread(target=perform_sum, args=(value,delay,))
    t.start()
def perform_sum(value, delay):
    global result
    time.sleep(delay)
    result += value

Когда я использую код выше, действие действительно выполняется, но значение result не обновляется в проводнике переменных перед выполнением другой командной строки.

Я до сих пор не использовал Electron, но я боюсь, что если я попрошу свой пользовательский интерфейс прочитатьзначение result, которое будет отображаться, не будет в реальном времени. Не могли бы вы помочь мне убедиться, что пользовательский интерфейс действительно будет показывать правильное значение result?

Большое спасибо!

...