2015-10-17 13 views
6

私はWindowsマシン上で実行していたプロジェクトのための3つの.pyファイルを持っています。これらのファイルの1つは、32ビットのみのライブラリを呼び出します。他の2つの.pyファイルには、32ビットと64ビットの両方に対応するライブラリがあります。彼らは、次のようになります。変更のpython通訳の半ばスクリプト

fileA.py 
     -- calls fileB.py (library is only 32 bit compatible) 
     -- also calls function in fileC.py (libraries are both 32 and 64 bit compatible) 

を今、私は私のpythonの64ビットバージョンを使用することができればの世話をすることができfileC.pyにおけるメモリエラーに実行しています。しかし、それを行うと、fileB.pyを実行しているときにエラーが発生します。なぜなら、64ビットPython(32ビットライブラリはArcPy)とうまく対話しない32ビットライブラリを持っているからです。メモリエラーのあるライブラリはpandasです.32ビットシステムの場合、pandasは2GBを超えるデータフレームを読み取ることができないため、メモリエラーが発生しています。

fileB.pyには32ビットのインタープリタを使用でき、fileC.pyには64ビットのインタープリタを使用できますか?どちらもfileA.pyから呼び出されることに注意してください。

+4

は、なぜあなたは、64ビットのArcPyを使用したくありませんか? –

+0

私は大好きです!私のインストールには32ビットの円弧しかありません。 64ビットバージョンを入手できる場所はありますか? – user308827

+0

使用するインタプリタを指定するサブプロセスを使用してスクリプトを呼び出すことができます –

答えて

2

64ビットコードを私の知る限り最良の方法で混ぜ合わせる方法はありません。

ArcPy(fileB)の周りに実行可能なラッパーを作成し、32ビットインタープリタを使用してsubprocessを使用して別のプロセスとして実行する必要があります。実行可能なArcPyラッパーは、処理結果をシリアル化された形式(JSONなど)で返す必要があります。

もう1つの方法はmultiprocessingです。 set_executable()関数を使用して、32ビットインタープリタを使用できます。このメソッドは、子プロセスと通信するためのより良いIPCメカニズムを提供します。どちらの場合も

、あなたは子プロセスをforkなってしまいます。 ArcPyを複数回呼び出す必要がある場合は、長時間実行される子プロセスとしてラッパーを記述し、マルチプロセッシングを使用することができます。

しかし、実現可能であれば、64ビットバージョンのArcPyをインストールしてください。 32ビット版を削除できない場合でも、別の場所に64ビット版をインストールしてください。

関連する問題