2017-09-21 7 views
0

この質問は、プロセス内からX-windowsを起動するときに同じエラーメッセージが表示される他の多くの記事と関連しています。最初の問題(ipython 2.6で見つけたもの):matplotlib(Tkinkerバックエンド)がmultiprocessing.processでクラッシュする - XInitThreadsを呼び出す方法

私は長いプロセスがあり、1つのpythonセッションで別々のプロセスを使ってparrallelで実行するのが理にかなっています。これらのプロセスは、matplotlib.pyplotを使用してグラフをプロットします。しかし、pyplot.show()またはpyplot.figureは()プロセスが呼び出されたときに次のエラーで全体のpythonセッションをクラッシュ:

[xcb] Unknown sequence number while processing queue 
[xcb] Most likely this ia a multi-threaded client and XInitThreads has not been called 
[xcb] Aborting, sorry about that. 
python2.7: xcb_io.c:259: poll_for_event: Assertion '!xcb_xlib_threads_sequence_lost' failed. 
Aborted 

私はよりはるかに簡単な形でこのエラーを再現することができましたipythonコマンドライン:

from matplotlib import pyplot 
import multiprocessing as mp 
def plot(): 
    pyplot.plot([1,2,3,4]) 
    pyplot.show() #this is the line it crashes on 

# the next two lines are only needed if not iython --pyplot or you have not called pyplot.ion() 
pyplot.plot([1,2,3,4]) 
pyplot.show() #close plot 

p=mp.process.Process(target=plot) 
p.start() #crash!!!!! 

matplotlib.get_backend()のチェックは私も素敵なGUIを作るためにTkinkerを使用していた同じエラーでTKAgg/Tkinkerその他を実行している示しています。また、別のxtermsの別のipythonセッションからの私のplotルーチンを問題なく実行することができます。 (これは、Processコマンドがそれ自身の名前空間を作成するコマンドを与えても同じことに思えます)。

私の質問はどこで(Pythonで)私はXIitThreadsを見つけるのですか?どのように/いつ実行されますか?それを越えた指は私の問題(そしてここで似たようなもの)を解決します。私はこの投稿を見つけました:Threading: PyQt crashes with "unknown request in queue while dequeuing"これはPyQt4バックエンドのためのものです(私は持っていないのでインストールできません)。

EDIT - pyplot.show()をpyplot.show(block = False )あなたは離れていないウィンドウが残っています - pyplot.save()の利点かもしれません。

また、Tkinterまたはmatplotlib内のxcb_ioへの呼び出しを検出しようとしても失敗しました。

答えて

0

新しいウィンドウをポップアップ表示する試みを避け、pyplot.save('foo.png')で)(.SHOW置き換える場合は、幸せになることがあります。次に、Webブラウザを使用して* .pngを表示します。

+0

プロットを育てていないが回避策です(私もPythonプログラムからブラウザを実行できる)が、エラーメッセージがXInitThreads実行するために私に語っ与えられた(と他のGUIを作成すると同じエラーを持っている)、試してみるいいかもしれませんそれが最初に。 eplotsの上に輝くことについての素晴らしいことは、ユーザーが詳細を見るためにズームインできることです。 – SRD

+0

複数のプロセスがあります。一つのプロセスを '.show()'に任せることができ、作業員のミツバチが完成したプロットを送るようにする方法はありますか? –

+0

それらはピクルスを通過するのですか?もしそうでなければ、それは難しいかもしれません。私が知っている限り、プロセスから返送されたものはすべて漬けにされなければならない。素晴らしい解決策かもしれません。 – SRD

関連する問題