Hello Arrow Team!
I was looking for some support related to matplotlib being used in an Arrow
flight server. Was having trouble requesting access to the flight Jira so I’m
tossing in some info here.
Specifically, a call to plt.savefig() causes a Fatal Bus Error. The call to
plt.savefig() can be called in either the do_action() or do_get() functions to
cause the Bus Error. Example code inside of a server class that inherits from a
pyarrow.flight.FlightServerBase:
def do_get(self, context: pyarrow.flight.ServerCallContext, dataset_ticket:
pyarrow.flight.Ticket):
plt.figure()
plt.plot([1, 2, 3, 4], [1, 4, 9, 16])
buffer = BytesIO()
print("created an image")
plt.savefig(buffer, format='png')
A flight client call to do_get() will cause an error such as the one I’m tacked
onto the end of this email.
Environment:
pyarrow = "^18.1.0"
matplotlib = "^3.10.0"
numpy = "1.26.4"
python = "3.11.3"
Let me know if I can provide any additional info!
-Alex Lewis
Here is an example of a traceback to a savefig call in a flight server method:
Fatal Python error: Bus error
Current thread 0x000000016c213000 (most recent call first):
File
"/Users/alex/chaos/chaotic/virtualenv/lib/python3.11/site-packages/numpy/linalg/linalg.py",
line 561 in inv
File
"/Users/alex/chaos/chaotic/virtualenv/lib/python3.11/site-packages/matplotlib/transforms.py",
line 1876 in inverted
File
"/Users/alex/chaos/chaotic/virtualenv/lib/python3.11/site-packages/matplotlib/transforms.py",
line 1462 in __sub__
File
"/Users/alex/chaos/chaotic/virtualenv/lib/python3.11/site-packages/matplotlib/axis.py",
line 2823 in get_tick_space
File
"/Users/alex/chaos/chaotic/virtualenv/lib/python3.11/site-packages/matplotlib/ticker.py",
line 2166 in _raw_ticks
File
"/Users/alex/chaos/chaotic/virtualenv/lib/python3.11/site-packages/matplotlib/ticker.py",
line 2236 in tick_values
File
"/Users/alex/chaos/chaotic/virtualenv/lib/python3.11/site-packages/matplotlib/ticker.py",
line 2228 in __call__
File
"/Users/alex/chaos/chaotic/virtualenv/lib/python3.11/site-packages/matplotlib/axis.py",
line 1536 in get_majorticklocs
File
"/Users/alex/chaos/chaotic/virtualenv/lib/python3.11/site-packages/matplotlib/axis.py",
line 1292 in _update_ticks
File
"/Users/alex/chaos/chaotic/virtualenv/lib/python3.11/site-packages/matplotlib/axis.py",
line 1362 in get_tightbbox
File
"/Users/alex/chaos/chaotic/virtualenv/lib/python3.11/site-packages/matplotlib/axes/_base.py",
line 3089 in _update_title_position
File
"/Users/alex/chaos/chaotic/virtualenv/lib/python3.11/site-packages/matplotlib/axes/_base.py",
line 3145 in draw
File
"/Users/alex/chaos/chaotic/virtualenv/lib/python3.11/site-packages/matplotlib/artist.py",
line 71 in draw_wrapper
File
"/Users/alex/chaos/chaotic/virtualenv/lib/python3.11/site-packages/matplotlib/image.py",
line 134 in _draw_list_compositing_images
File
"/Users/alex/chaos/chaotic/virtualenv/lib/python3.11/site-packages/matplotlib/figure.py",
line 3257 in draw
File
"/Users/alex/chaos/chaotic/virtualenv/lib/python3.11/site-packages/matplotlib/artist.py",
line 71 in draw_wrapper
File
"/Users/alex/chaos/chaotic/virtualenv/lib/python3.11/site-packages/matplotlib/artist.py",
line 94 in draw_wrapper
File
"/Users/alex/chaos/chaotic/virtualenv/lib/python3.11/site-packages/matplotlib/backends/backend_agg.py",
line 382 in draw
File
"/Users/alex/chaos/chaotic/virtualenv/lib/python3.11/site-packages/matplotlib/backends/backend_agg.py",
line 429 in _print_pil
File
"/Users/alex/chaos/chaotic/virtualenv/lib/python3.11/site-packages/matplotlib/backends/backend_agg.py",
line 481 in print_png
File
"/Users/alex/chaos/chaotic/virtualenv/lib/python3.11/site-packages/matplotlib/backend_bases.py",
line 2040 in <lambda>
File
"/Users/alex/chaos/chaotic/virtualenv/lib/python3.11/site-packages/matplotlib/backend_bases.py",
line 2184 in print_figure
File
"/Users/alex/chaos/chaotic/virtualenv/lib/python3.11/site-packages/matplotlib/figure.py",
line 3490 in savefig