[英]a Python script in 32 bit invoking multiprocessing running in 64 bit virtualenv
我需要在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
我在示例代码中遗漏了什么?
我看到这个问题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.