Запуск трех функций через равные промежутки времени - многопоточность?многопроцессорная? - PullRequest
2 голосов
/ 10 марта 2012

Я задавал очень похожий вопрос ранее , но масштабы проекта быстро выходят за пределы того, где меня могут получить сигналы (я думаю). По сути, моя программа будет работать с тремя разными интервалами; одна функция каждые 15 секунд, одна функция с настраиваемым интервалом (обычно от 5 до 60 секунд) и одна функция каждый час или два.

С интуитивно понятной точки зрения кажется, что множественные вызовы signal.signal () с отдельными функциями не слишком далеко ушли бы от меня: таймер ITIMER_REAL выдает только один сигнал - SIGALRM, и, таким образом, не было бы способа определить итимер выдает сигнал. Поскольку для функции 15-секундного интервала требуется для запуска независимо от того, что может происходить с другими функциями, у меня остается выбор: многопоточность или многопроцессорность.

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

1 Ответ

3 голосов
/ 10 марта 2012

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

Или, вы можете позволить одному циклу обрабатывать это с приоритетной очередью . Вставьте пары (time, task) в очередь, где task - это описание задачи, которую нужно выполнить. Затем в цикле:

  • вытолкнуть предмет
  • дождаться истечения указанного time
  • выполнить задание
  • перенести задачу через 5 секунд, 15 минут, 2 часа и т. Д., Поместив новый элемент в очередь.
...