Мультипроцессинг и Tkinter (Python 3.x)
У меня есть сценарий Python, который должен имитировать простое движение планет, он работает нормально, и я добавил некоторый код для хранения всех координат пути планет, так что сценарий должен рассчитывать орбиту только один раз (по сути, он рендерит и воспроизводит траектория орбиты). Это тоже хорошо работает, однако, это действительно медленно для нескольких планет, потому что я пытаюсь сделать симуляцию настолько точной, насколько это возможно, поэтому каждой планете требуется время, чтобы выполнить свои 'индивидуальные вычисления.
Я подумал об использовании многопроцессорной обработки, чтобы обойти это, и столкнулся с проблемой. Когда я запускаю сценарий и добавляю две планеты (запускает многопроцессорность), я не получаю никаких ошибок, и многопроцессорность, предположительно, работает как положено (консоль печатает "сделано" несколько раз). Однако планеты просто замерзают. Я полагаю, что это, вероятно, связано с вызовом update() в другом процессе, но я не уверен.
Вот мой код: https://github.com/cristian-bicheru/Orbit-Sim-With-Rendering/blob/master/orbit_sim_with_rendering.py
РЕДАКТИРОВАТЬ:
В соответствии с просьбой, вот вероятный проблемный код:
q = multiprocessing.Pool(processes = len(planets))
async_result = q.map_async(update, planets)
q.close()
q.join()
а также
def update(objecT):
objecT.update()
Содержимое обновления довольно длинное, но состоит из некоторых вычислений и движения по этим вычислениям, или движения, основанного на словаре координат. Движение выполняется с помощью canvas.move(self.shape, dx, dy)