Минимальный рабочий пример
Я ожидаю, что следующий покажет сюжет, но я не вижу сюжета, и интерпретатор просто зависает (мой бэкэнд сообщает себя как TkAgg
).
import matplotlib.pyplot as plt
from threading import Thread
def plot():
fig, ax = plt.subplots()
ax.plot([1,2,3], [1,2,3])
plt.show()
def main():
thread = Thread(target=plot)
thread.setDaemon(True)
thread.start()
print 'Done'
Как мне отобразить график?
Контекст
Я запускаю симуляцию с многократными итерациями и хочу обновить свой график каждые 1000 итераций, чтобы я мог контролировать, как меняется мое моделирование.
Psedocode ниже:
iterations = 100000
for i in iterations:
result = simulate(iteration=i)
if not i % 1000:
# Update/redraw plot here:
# Add some lines, add some points, reset axis limits, change some colours
Наличие сюжета в главном потоке приводит к тому, что графический интерфейс графика зависает/падает, предположительно, потому что у меня другая работа продолжается. Поэтому идея заключалась в том, чтобы делать заговор в отдельном потоке.
Я видел предложения (например, здесь) для использования процесса, а не потока. Но тогда я не могу манипулировать фигурой или осями, чтобы добавить строки и т.д., Пока моя симуляция работает, потому что объект фигуры находится в удаленном процессе.
Изменить
Я не уверен, что этот вопрос является дубликатом другого, потому что этот вопрос касается того, почему pyplot
api не может использоваться для управления двумя различные графики, каждый из которых находится в отдельном потоке. Это связано с тем, что условия гонки, возникающие в результате выполнения двух графиков, одновременно препятствуют pyplot
определить, какая фигура является текущей фигурой.
Однако у меня есть только 1 сюжет, поэтому pyplot
имеет только один и единственный текущий показатель.