@MaxiZm

Почему — то когда работаю с классом не через главный поток, переменные в классе не изменяются, почему?

import time
from threading import Thread

class Human():
    def __init__(self, id):
        self.hp = 100
        self.defence = 0
        self.attack = 2
        self.tycoons = {}
        self.id = id
        self.money=0
        self.isworking = 0
    def work(self):
        if self.isworking == 0:
            self.isworking = 1
            print("Вы идете на подработку.")
            time.sleep(1)
            give = randint(2000, 2500)
            print(f"Работа завершена, получено {give} рублей.")
            self.money+=give
            self.isworking = 0
        elif self.isworking==1:
            print(f"Вы уже работаете! (К сожалению вы не умеете разделяться на 2 части и работать на двух разных работах одновременно)")

per=Human(1)
th=Thread(target=per.work, args=())
th.start()

th=Thread(target=per.work, args=())
th.start()

После первого запуска не меняется кол-во денег, а после второго и больше начинает писать, будто я все еще работаю.
  • Вопрос задан
  • 83 просмотра
Решения вопроса 1
Ввиду отсутствия какой-либо синхронизации потоков, работающих с одним и тем же объектом, результат получается неопределен.
В представленном коде запускаются 2 потока подряд, без ожидания завершения каждого из них. А результат, вероятно, проверялся в главном потоке, пока оба потока ещё работали.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Vindicar
@Vindicar
RTFM!
Ну второе как раз объяснимо, ты запускаешь work() для одного и того же класса.
Пока первая копия work() спит в time.sleep(1), начинает выполняться вторая, так как всё происходит в отдельных потоках. Вторая видит isworking = 1, и останавливается.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
11 мая 2024, в 00:19
1000 руб./за проект
10 мая 2024, в 23:51
30000 руб./за проект
10 мая 2024, в 23:33
2500 руб./за проект