32位调用64位virtualenv中运行的多处理的Python脚本

时间:2018-10-21 19:34:36

标签: python multiprocessing

我需要在32位系统范围内运行Python脚本,以通过第三方应用程序生成/收集数据。但是我想通过numba使用GPU处理数据,因此必须在64位Python环境中运行。

我已经建立了一个64位Python virtualenv,并测试了一些可以在其中运行的简单numba代码。那么,我该如何在父流程中编写代码,以调用子流程(假设为multiprocessingsubprocess),该子流程将切换为64位virtualenv并使用numba进行计算?更具体地说:

  1. 我应该使用multiprocessing还是subprocess来实现父(32位Python)和子进程(64位Python)机制吗?
  2. 如何在父进程和子进程之间传递大量数据?

可能的代码示例:

def func_32():
    # data collection
    # using 3rd party API
    return data

def func_64(data, output):
    # switch to 64 bit virtual env
    # using virtualenvwrapper-win
    os.system('workon env64bit')
    # numba data process
    # results stored in output
    return None

def main():
    data = func_32()
    # I think I only need one process since it will be in GPU not CPU
    p = multiprocessing.Process(target=func_64, args=(data, output))
    p.start()
    return output

示例代码中我缺少什么?

1 个答案:

答案 0 :(得分:0)

我看到了这个问题Spawn multiprocessing.Process under different python executable with own path,在给出我的Python版本(2.7.5 32位,2.7.15 64位)的情况下,发现了一点点困惑。

def func_32():
    # data collection
    # using 3rd party API
    return data

def func_64(data, output):
    # switch to 64 bit Python
    # not directly calling virtualenv
    # to switch env
    import sys
    print sys.executable
    # will print  C:\Python64\Python.exe
    # numba data process
    # results stored in output
    return None

def main():
    data = func_32()
    multiprocessing.set_executable(r'C:\Python64\python.exe')
    p = multiprocessing.Process(target=func_64, args=(data, output))
    p.start()
    p.join()
    return output

但是,为了在该虚拟环境中使用64位Python软件包,我最终大多从activate_this.py(位于virtualenv文件夹中)复制代码,以更改Python搜索路径等。在Spawn multiprocessing.Process under different python executable with own path中回答。

我认为使用multiprocessing为我提供了更方便的在父子进程之间传递数据的方法,尤其是大量数据。