我需要在32位系统范围内运行Python脚本,以通过第三方应用程序生成/收集数据。但是我想通过numba
使用GPU处理数据,因此必须在64位Python环境中运行。
我已经建立了一个64位Python virtualenv
,并测试了一些可以在其中运行的简单numba
代码。那么,我该如何在父流程中编写代码,以调用子流程(假设为multiprocessing
或subprocess
),该子流程将切换为64位virtualenv
并使用numba进行计算?更具体地说:
multiprocessing
还是subprocess
来实现父(32位Python)和子进程(64位Python)机制吗?可能的代码示例:
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
示例代码中我缺少什么?
答案 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
为我提供了更方便的在父子进程之间传递数据的方法,尤其是大量数据。