2016-05-05 8 views
0

sklearn.clusterとscipy.spatialをNXという3D CAD/CAMモデリングプログラムにインポートしようとしています。scikit-learnをNX Open APIにインポートできません

Python 3.3.2(conda create -n py33)用のAnacondaで仮想環境を作成し、condle経由でsklearnをインストールしました。私はインテル64ビットマシンでWindows 7を使用しています。ほとんどの場合、いくつかの(np.array_equiv)がNXをロックしますが、私はnumpyメソッドと属性を正常に使用することができました。

import sklearn.clusterでPythonファイルを実行すると、NXがクラッシュします。私はまだSklearnのクラスやメソッドを使用していません。 import行だけでNXがクラッシュします。私もimport scipy.spatialと同様の問題に直面しています。 scipy.spatialメソッドやクラスは使用しませんでした。

ドキュメントによると、コメント#nx:threadedをpythonファイルの最上部に置くと問題は解決するはずですが、それは解決されません。

Python 3.2以降には新しいGIL実装があると私は理解しています。以下の資料は、NXに埋め込まれたPythonインタプリタが異なるの実行環境を分離するためにsubinterpreterスレッドを使用してPythonスクリプトを実行するPythonの に螺拡張モジュールを実行

https://docs.plm.automation.siemens.com/tdoc/nx/10.0.3/release_notes/#uid:xid385122

を述べたようにNXにねじ込ま拡張モジュールをインポートすると、問題となり得ます同時に実行されているスクリプト。たとえば、起動スクリプトを使用したり、ユーザー出口を使用したり、セッションで明示的にジャーナルを実行したりすることができます。これらのスクリプトを別々のサブインタプリタで実行すると、不正なアクセスや衝突を避けるために、これらの環境をそれぞれ別々に保ちます。しかし、このアプローチにはいくつかの欠点があります。 Cスレッドを使用して操作を実行するサードパーティの拡張モジュール(NXOpen以外の拡張モジュール、matplotlibなど)がいくつかあります。これらの拡張モジュールは安全にインポートできますが、Cスレッドを開始する関数が呼び出されると、サブインタプリタがハングしたりクラッシュしたりします。これらの拡張機能は、メインインタプリタスレッドでのみ安全に実行されます。残念ながら、Pythonはサブインタープリタのスレッドでこのような拡張モジュールを実行する安全な方法を提供しておらず、スクリプトがすでに実行されているときにサブインタープリタのスレッドからメインのインタープリタのスレッドに切り替える方法も提供していません。

NXは、このようなスレッド拡張モジュールをサポートするために、Pythonスクリプトがインタプリタを準備する前にこれらのモジュールを使用しているかどうかを知る必要があります。したがって、スクリプトがこれらの種類のスレッド拡張モジュールを使用している場合や、スレッド拡張モジュールを直接的または間接的に使用しているモジュールをインポートする場合は、最初の3行のどこにでもnx:threadedというテキストをコメントとして追加する必要があります。たとえば、次のように

# nx:threaded 

# some comments nx:threaded some comments 

# some comments 
# nx:threaded 
# some comments 

これは、可能な問題を回避するために、代わりにsubinterpreterスレッドのメインスレッドでスクリプトを実行するために、その埋め込まれたPythonインタプリタを準備するためにNXを指示します。純粋なPythonスレッドは、サブインタプリタでこの種の問題を抱えておらず、この追加のコメントなしで使用する必要があります。このコメントは、起動スクリプト、ユーザー出口スクリプト、または通常のジャーナルのいずれのPythonスクリプトにも追加できます。 このコメントを不必要に使用しないでください。これは、メインインタプリタスレッド内のすべてのスクリプトを実行し、不正なデータアクセスやオブジェクトの割り振り解除などの異常な動作が発生することがあります。このコメントは、スレッド拡張モジュールをインポートして使用する場合にのみ使用します。

答えて

1

試し#nx:スレッドトークン。 一部の拡張モジュールは、インポート時にネイティブスレッドを開始することがあります。どうやら、sklearn.clusterインポートは、埋め込みサブインタプリタ状態のデータを妨害または変更しています。同じ問題がnumpyでも見られる可能性があります。マニュアルが100%正しいとは限りません。私は、 "nx:threaded"トークンを追加するとあなたの問題を解決できるはずだと思います。

+0

あなたは '#nx:threaded'または' #nx:threaded token'を意味しますか?私は既に '#nx:threaded'を試していて、うまくいきませんでした。サブインタープリタについてはあなたが正しいと思います – webmaker

+0

上記のコメントをご覧ください – webmaker

関連する問題