@S10LI

Как правильно использовать многоядерность в python?

Я только изучаю Python

Ниже не полный код, а лишь объяснение логики работы

import json, time
from threading import Thread
sleep = time.sleep

#Словари хранятся в файле json
gui_data = {
  'step':1
}
counter_data = {
  'count':0
}
###


def add():
    with open ('gui_data.json', 'r')
        gui_data= json.load(f)
        f.close()
    print('Введите на сколько вы хотите увеличить шаг счетчика')
    gui_data['step'] += input()
    with open('gui_data.json', 'w+', encoding='utf-8') as f:
        f.write(json.dumps(gui_data, sort_keys=False, indent=4, ensure_ascii=False, separators=(',', ': ')))
        f.close()

def counter():
    while True:
        with open ('gui_data.json', 'r')
            gui_data= json.load(f)
            f.close()
    with open ('counter_data.json', 'r')
        counter_data= json.load(f)
        f.close()
    counter_data['count'] += gui_data.json['step']
    print(counter_data['count'])
    with open('counter_data.json', 'w+', encoding='utf-8') as f:
        f.write(json.dumps(counter_data, sort_keys=False, indent=4, ensure_ascii=False, separators=(',', ': ')))
        f.close()
    sleep(1)

th_1, th_2 = Thread(target = gui_func), Thread(target = counter)

if __name__ == '__main__':
    th_1.start(), th_2.start()
    th_1.join(), th_2.join()


Соответственно в таком виде все работает нормально
Счётчик каждую секунду считывает из файла 'counter_data.json' переменную 'count'
Из файла 'gui_data.json' переменную 'step'
И выполняет сложение после чего записывает новое значение в файл 'counter_data.json'
И выводит это в GUI. Пользователь может увеличить значение 'step'

Я пытаюсь сделать так, чтобы увеличение значения 'step' имело стоимость например x2 от вводимого значения и
Вычиталось из текущего счетчика 'count'

То есть допустим
'count' = 1000
'step' = 100
Пользователь вводит '100' (100 x 2 вычитается)
'count' = 800
'step' = 200

Соответственно если я описываю это в def add():
То при записи в файл 'counter_data.json' может вылететь ошибка,
Потому что с файлом работает в это время def counter():

Может быть одна функция должна передавать в другую,
Что в текущем цикле нужно сделать сложение по старому 'step' и из 'count' вычесть 200
Но я не знаю как это сделать
  • Вопрос задан
  • 77 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы