改变python解释器mid-script

时间:2015-10-17 02:19:10

标签: python

我在Windows机器上运行的项目有3个.py文件。其中一个文件调用一个只有32位的库。其他2个.py文件具有32位和64位兼容的库。它们看起来像这样:

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)

现在,我遇到了fileC.py中的内存错误,如果我可以使用64位版本的python,可以解决这个问题。但是,如果我这样做,我在执行fileB.py时会遇到错误,因为它有一个32位的库,它与64位python(32位库是ArcPy)不能很好地对话。内存错误的库是pandas,因为对于32位系统,pandas无法读取大于2GB的数据帧,因此发生内存错误。

有什么方法可以为fileB.py使用32位解释器,为fileC.py使用64位。请记住,这两个都是从fileA.py。

调用的

1 个答案:

答案 0 :(得分:2)

据我所知,无法在同一进程中混合使用 32 64位代码。

您需要在ArcPy(fileB)周围编写一个可执行包装器,并使用32位解释器使用subprocess作为单独的进程执行它。可执行的ArcPy包装器需要以序列化格式(如JSON)返回其处理结果。

另一种选择是multiprocessing。您可以使用set_executable()函数来使用32位解释器。此方法提供了更好的IPC机制来与子进程通信。

在这两种情况下,您最终都会分叉子进程。如果需要多次调用ArcPy,您可能希望将包装器编写为长时间运行的子进程并使用多处理。

那就是说,如果可行,请自己帮个忙并安装64位版本的ArcPy。即使您无法删除32位版本,也请在备用位置安装64位版本。