Python: разделить переменную между разветвленным потомком и родителем - PullRequest
0 голосов
/ 27 января 2020

Я довольно новичок в Python, и у меня проблема с разделением переменной между родительским сценарием и разветвленным дочерним элементом.

Объект выглядит следующим образом

Главный сценарий должен получать задачи из вызова API и запустить их в подпроцесс. Затем он уменьшает счетчик доступных ЦП, чтобы избежать насыщения ресурсов, и получает новые задачи, если есть доступные. Я хотел бы также увеличить счетчик, когда подпроцесс завершен, но я не могу заставить его работать.

Вот основная функция моего скрипта

def main():
    while True:
        global availables_cpu

        print("Got %s availables CPU requesting new job" % availables_cpu)
        response = requests.get("http://" + url_api + "/api.php?action=get&ressources=" + str(availables_cpu))
        data = json.loads(response.text)
        job_path = data["hash"]

        if job_path is None :
            print("Nothing to do, waiting for a while")

        else:
            dir = job_path.rstrip()

        if int(data["cpu"]) <= availables_cpu:
            availables_cpu -= int(data["cpu"])
            newpid = os.fork()

        if newpid == 0:
            code = child()
            availables_cpu += int(data["cpu"])
            os._exit(code)
        else:

            time.sleep(3)
            print("Parent")

Функция child () просто получает данные и запускает скрипт в подпроцессе

Я не уверен, как лучше это сделать, и я открыт для любых предложений.

1 Ответ

0 голосов
/ 27 января 2020

По предложению @polku multiprocessing.Value хорошо работает

С этими модификациями

availables_cpu = multiprocessing.Value('I',psutil.cpu_count())

и замените все вхождения availables_cpu на availables_cpu.value

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...