Как уменьшить нагрузку на процессор используя threading?

Есть main файл, и куча вспомогательных модулей, код в которых должен исполнятся в реальном времени, причем одновременно, удалось реализовать это с помощью потоков Thread и циклов While true в них, (я новичок, не кидайте камни), но когда число потоков дошло до 6 одновременно выполняющихся, процессор и все его ядра начали долбится в 100%, если у кого есть более производительное решение параллельного выполнения зацикленных модулей, я был бы очень благодарен

Ниже пример main файла с логикой запуска модулей, только тут одновременно запускаются(имитируют запуск), только 2 модуля, а у меня запускаются 6 модулей

# -*- coding: utf-8 -*-

from threading import Thread
import keyboard
import time

class main:
    def __init__(self):
        self.start = False
        self.stop = False
        self.exit = False

    def module_one(self):
        while True:
            if self.start == True:
                self.stop = False
                while True:
                    if self.stop == True:
                        self.start = False
                        break
                    time.sleep(1)
                    print('Start module one')
            if self.exit == True:
                break

    def module_two(self):
        while True:
            if self.start == True:
                self.stop = False
                time.sleep(1)
                while True:
                    if self.stop == True:
                        self.start = False
                        time.sleep(1)
                        break
                    time.sleep(1)
                    print('Start module two')
            if self.exit == True:
                break


    def run_programm(self):
        while True:
            if keyboard.is_pressed('9'):
                print('Start programm')
                self.start = True
                while True:
                    if keyboard.is_pressed('0'):
                        print('Stop programm')
                        self.stop = True
                        break
            if keyboard.is_pressed('8'):
                self.exit = True
                break

if __name__ == "__main__":
    object_main = main()

    RUN_CYCLES = Thread(target = object_main.run_programm)
    RUN_CYCLES.start()

    MODULE_ONE_CYCLE = Thread(target = object_main.module_one)
    MODULE_TWO_CYCLE = Thread(target = object_main.module_two)

    MODULE_ONE_CYCLE.start()
    MODULE_TWO_CYCLE.start()

    MODULE_ONE_CYCLE.join()
    MODULE_TWO_CYCLE.join()

    RUN_CYCLES.join()

p.s Требуется писать программу на python 2, пишу её на python 2.7


Ответы (1 шт):

Автор решения: vadim vaduxa

Использовать вместо self.start, self.stop, self.exit, while True и time.sleep, логику основанную на threading.Event

self.start = threading.Event()

if self.start.is_set():

while not self.stop.is_set():

self.start.wait()

и т.п.

→ Ссылка