在尝试了解内置包multiprocessing和Pytorch 的multiprocessing包时,我观察到两者之间存在不同的行为。我觉得这很奇怪,因为Pytorch 的包与内置包完全兼容。
具体来说,我指的是进程之间共享变量的方式。在 Pytorch 中,张量通过 inplace 操作移动到共享内存share_memory_()。另一方面,通过使用shared_memory模块,我们可以得到与内置包相同的结果。
我很难理解两者之间的区别在于,使用内置版本,我们必须显式访问启动进程内的共享内存块。然而,我们不需要使用 Pytorch 版本这样做。
这是一个Pytorch的玩具示例,显示了这一点:
import time
import torch
# the same behavior happens when importing:
# import multiprocessing as mp
import torch.multiprocessing as mp
def get_time(s):
return round(time.time() - s, 1)
def foo(a):
# wait ~1sec to print the value of the tensor.
time.sleep(1.0)
with lock:
#-------------------------------------------------------------------
# WITHOUT explicitely accessing the shared memory block, we can observe …Run Code Online (Sandbox Code Playgroud)