繁体   English   中英

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

[英]a Python script in 32 bit invoking multiprocessing running in 64 bit virtualenv

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

我已经设置了64位Python virtualenv ,并测试了一些在那里运行良好的简单numba代码。 那么如何在父进程中编写代码来调用子进程(我假设的multiprocessingsubprocess进程),它将切换到64位virtualenv并使用numba进行计算? 进一步来说:

  1. 我应该使用multiprocessingsubprocess进程来实现父(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

我在示例代码中遗漏了什么?

我看到这个问题Spawn multiprocessing.Process在不同的python可执行文件下使用自己的路径 ,并在我的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多处理中的答案。使用自己的路径处理不同的python可执行文件

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM