У меня есть следующий код, который строит изменяющуюся кривую, используя matplotlib в потоке, и кажется, что я могу построить ее только один раз, во второй раз, когда я запускаю новый поток для той же функции, matplotlib просто строит пустую фигуру и зависаетup.
код прикреплен
import threading
import numpy as np
import matplotlib
# matplotlib.use('')
import matplotlib.pyplot as plt
import time
plt.ion()
running = False # if running false, thread automatically ends
def drawing():
print("start drawing")
data = np.arange(100)
fig, axes = plt.subplots()
line, = axes.plot(data)
while running:
data = np.roll(data, 1)
line.set_ydata(data)
# plt.draw()
fig.canvas.flush_events()
time.sleep(0.1)
print("stop drawing")
def run_drawing():
global running
while 1:
if running:
c = input("press 'q' to quit or enter to STOP drawing: ")
else:
c = input("press 'q' to quit or enter to START drawing: ")
if c == 'q':
if running:
running = False
break
else:
if not running:
t1 = threading.Thread(target=drawing)
running = True
t1.start()
else:
running = False
if __name__ == '__main__':
run_drawing()
и прилагаются два изображения, которые показывают, что я имею в виду под зависанием фигуры matplotlib.во второй раз, когда поток фактически работает, потому что, если я помещу печать в цикл while функции потока, данные изменятся.
Я хотел бы знать, почему это так, и есть ли способ решить эту проблему?вопрос?
