2016-03-28 2 views
2

チャップス、私は修正する方法がわからないということに遭遇しました奇妙な沈黙の組み合わせでのpythonでのクラッシュ:OSX、リクエスト、sqlite3の、

奇怪な行動をマルチプロセッシング。私は次のコードをお持ちの場合:

import requests, multiprocessing, sqlite3 

requests.get("http://www.google.com") 
def fn(): 
    sqlite3.connect("db") 
    print "this is never printed" 

proc = multiprocessing.Process(target = fn) 
proc.start() 
proc.join() 

を私はOS Xヨセミテ上でそれを実行し、サブプロセスは、コマンドを接続sqlite3の中に倒れると、print文が実行されることはありません。私は間違いや何かの兆候が見当たらない。

requests.getステートメントを削除すると、処理が再開されます。

Ubuntuでうまく動作するようです。

アイデア?

+1

「フォールオーバー」とはどういう意味ですか?出力がなくなり、 '(ilimit -c unlimited'を実行して)コードを実行すると、' core'ダンプファイルが生成されます。 – cdarke

+0

こんにちはcdarke、助けてくれてありがとう!私はあなたが提供したコマンドを使用してファイルの任意の種類を生成させることができませんでした。しかし、以前はvirtualenvの中で実行していました。私はvirtualenvを無効にして、私のグローバルPythonバイナリに対して実行しました。次の情報のダンプとともに、 'pythonはかなり予期せずエラーが発生しました:http://pastebin.com/vdiQFT8j 十分な情報が必要ですか? – maambmb

+2

OK、SIGSEGVは無効なアドレスです - おそらく最も一般的なクラッシュの形式です。通常は、CまたはC++コードの無効なポインタによって発生します。 Ubuntuのような別の場所から来たOS X上でモジュールを実行しようとしていますか?または、32ビットと64ビットを混在させることができますか? – cdarke

答えて

1

チャップス、

これは100%の解決策ではないですが、これに苦しんで誰にも、

ライブラリへの切り替えの代わりrequestsは、問題を解決しているようです。

1

これはMac OS X/Pythonのバグです。この問題を回避するには、マルチプロセッシングを呼び出す前に次のコードを実行します。プロセス:sqlite3.connect(":memory:").close()。参照:http://bugs.python.org/issue27126

+0

あなたはまったくの伝説です!ありがとうございました – maambmb

+0

ちょうどこれが最後に私のために100%働いていないことを追加する必要があります。それは約90%のクラッシュを減らしましたが、私はまだ時々ランダムプロセスを取得していました...私たちがやったことは、python.orgからpythonをインストールし、標準のOS Xのpythonの代わりにそれを使用することでした。 – maambmb

関連する問題