У меня проблема с Python с модульной многопроцессорностью. В принципе, я делаю игру (с tkinter as graphics), в которой у меня есть класс Game и несколько классов (entites), у которых есть метод обновления (self). Так что это немного похоже:Python - интеграция многопроцессорности с классами
class Game:
__init__(self, etc...):
self.entities = []
gameloop(self):
for entity in self.entities:
entity.update
class EntityExample:
__init__(self, game, etc...):
self.game = game
update(self):
#stuff
А потом я:
game = Game()
game.entities.append(EntityExample())
game.gameloop()
Так что я попытался, чтобы оптимизировать код, чтобы сделать такую вещь:
импортная многопроцессорная обработка
class Game:
__init__(self, etc...):
self.entities = []
self.threads = []
self.lock = multiprocessing.Lock()
gameloop(self):
for entity in self.entities:
entity.update
class EntityExample:
__init__(self, game, etc...):
self.game = game
update(self):
self.game.lock.acquire()
#stuff
self.game.lock.release()
И в gameloop:
for entity in entities:
t = multiprocessing.Process(target=entity.update)
t.start()
t.join
self.threads.append(t)
Цель состояла в том, чтобы сделать расчеты на разных ядрах в то же время для повышения производительности, но это не работает, к сожалению. Я также прошу убить программу в IDLE: «Программа все еще работает. Вы хотите ее убить?».
Спасибо заранее,
Talesseed
P.S. : классы не подбираются
P.P.S. : Я читал, что создание нового Процесса копирует код внутри файла в новый поток, и это может быть проблемой, потому что мой код имеет длину ~ 1600 строк.
Почему весь ваш код начинается с дефиса на каждой строке? –
@BryanOakley Упс, я удалю это – Talesseed
, ни «__init__», gameloop, ни обновление не были объявлены как функции, а обновлению не хватает self, поэтому он не является частью EntityExample –