Holaaa, estuve intentando plottear asincronamente en dos subplots, empleando lo que sea, Threads, Multiprocessing.Process y Pools, ¿Que puedo hacer?
Por cierto, por cierto, al utilizar cualquiera de estos 3 me da error y no he podido emplearlos, mi codigo esta dividido en tres archivos, los cuales contienen:
MAIN.PYimport numpy as np
import matplotlib.pyplot as plt
import multiprocessing
import lines
import bars
if __name__ == "__main__":
fig, ax = plt.subplots(2, 2)
with multiprocessing.get_context("spawn").Pool() as pool:
pool.map(lines.start, (plt, fig, ax[0, 0]))
# Esto es de cuando intente utilizar SubProcesos
"""barproc = multiprocessing.Process(target=bars.start, args=(plt, fig, ax[0, 1]))
procs.append(barproc)
barproc.start()
for proc in procs:
proc.join()"""
LINES.PYimport numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
import random
def start(plt, fig, ax):
x = np.arange(0, 2*np.pi, 0.1)
line1, = ax.plot(x, np.sin(x))
line2, = ax.plot(x, np.sin(x))
line3, = ax.plot(x, np.sin(x))
def animate(i):
line1.set_ydata(np.sin(x - i / 50))
line2.set_ydata(np.sin(x + i / 75))
line3.set_ydata(np.sin(x - i / 100))
return line1, line2, line3
anim = animation.FuncAnimation(fig, animate, interval=1, blit=True, save_count=25)
plt.show()
if __name__ == "__main__":
fig, ax = plt.subplots(2, 2)
start(plt, fig, ax[0, 0])
BARS.PY: este es igual que el anterior pero usando graficas de barras :v
Y el error que me da es este:
Process SpawnPoolWorker-1:
Traceback (most recent call last):
File "/usr/lib/python3.10/multiprocessing/process.py", line 314, in _bootstrap
self.run()
File "/usr/lib/python3.10/multiprocessing/process.py", line 108, in run
self._target(*self._args, **self._kwargs)
File "/usr/lib/python3.10/multiprocessing/pool.py", line 114, in worker
task = get()
File "/usr/lib/python3.10/multiprocessing/queues.py", line 367, in get
return _ForkingPickler.loads(res)
File "/usr/lib/python3/dist-packages/matplotlib/figure.py", line 2911, in __setstate__
mgr = plt._backend_mod.new_figure_manager_given_figure(num, self)
AttributeError: 'NoneType' object has no attribute 'new_figure_manager_given_figure'
Process SpawnPoolWorker-2:
Traceback (most recent call last):
File "/usr/lib/python3.10/multiprocessing/process.py", line 314, in _bootstrap
self.run()
File "/usr/lib/python3.10/multiprocessing/process.py", line 108, in run
self._target(*self._args, **self._kwargs)
File "/usr/lib/python3.10/multiprocessing/pool.py", line 114, in worker
task = get()
File "/usr/lib/python3.10/multiprocessing/queues.py", line 367, in get
return _ForkingPickler.loads(res)
File "/usr/lib/python3/dist-packages/matplotlib/figure.py", line 2911, in __setstate__
mgr = plt._backend_mod.new_figure_manager_given_figure(num, self)
AttributeError: 'NoneType' object has no attribute 'new_figure_manager_given_figure'
Entonces, umm, ¿que podria hacer yo para plottear en dos o mas subplots asincronamente?