我在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。
调用的答案 0 :(得分:2)
据我所知,无法在同一进程中混合使用 32 和 64位代码。
您需要在ArcPy
(fileB)周围编写一个可执行包装器,并使用32位解释器使用subprocess作为单独的进程执行它。可执行的ArcPy包装器需要以序列化格式(如JSON)返回其处理结果。
另一种选择是multiprocessing。您可以使用set_executable()
函数来使用32位解释器。此方法提供了更好的IPC机制来与子进程通信。
在这两种情况下,您最终都会分叉子进程。如果需要多次调用ArcPy,您可能希望将包装器编写为长时间运行的子进程并使用多处理。
那就是说,如果可行,请自己帮个忙并安装64位版本的ArcPy。即使您无法删除32位版本,也请在备用位置安装64位版本。