Web App Server(Djangoなど)でのMatplotlibクラッシュ回避方法

Djangoに限りませんがPythonのWebアプリケーションサーバーでMatplotlibを使おうとすると以下のようなメッセージを吐き出し最悪サーバーがダウンしてしまうことがあります。

Assertion failed: (NSViewIsCurrentlyBuildingLayerTreeForDisplay() != currentlyBuildingLayerTree), function NSViewSetCurrentlyBuildingLayerTreeForDisplay, file /BuildRoot/Library/Caches/com.apple.xbs/Sources/AppKit/AppKit-1671.10.106/AppKit.subproj/NSView.m, line 14143.

Process finished with exit code 132 (interrupted by signal 4: SIGILL)

これを回避するのは実に簡単な方法で出来ます。

以下赤字のようpylabやpyplotをimportする前にMatplotlibのバックエンドプログラムを指定するだけです。
バックエンドは”Agg”以外にもありますが、大部分の使用パターンをこれでカバー出来るので”Agg”を指定しておけばOKかと思います。

import matplotlib
matplotlib.use(‘Agg’)
import matplotlib.pyplot as plt

sponsor