def _winapi_childhandle_after_createprocess_child(self):
"""Called on Windows in the child process after the CreateProcess()
system call. This is required for making the handle usable in the child.
"""
if WINAPI_HANDLE_TRANSFER_STEAL:
# In this case the handle has not been inherited by the child
# process during CreateProcess(). Steal it from the parent.
new_winapihandle = multiprocessing.reduction.steal_handle(
self._parent_pid, self._parent_winapihandle)
del self._parent_winapihandle
del self._parent_pid
# Restore C file descriptor with (read/write)only flag.
self._fd = msvcrt.open_osfhandle(new_winapihandle, self._fd_flag)
return
# In this case the handle has been inherited by the child process during
# the CreateProcess() system call. Get C file descriptor from Windows
# file handle.
self._fd = msvcrt.open_osfhandle(
self._inheritable_winapihandle, self._fd_flag)
del self._inheritable_winapihandle
python类reduction()的实例源码
def reduce_storage(storage):
from . import get_sharing_strategy
if storage.is_cuda:
metadata = storage._share_cuda_()
cache_key = metadata[1]
rebuild = rebuild_storage_cuda
elif get_sharing_strategy() == 'file_system':
metadata = storage._share_filename_()
cache_key = metadata[1]
rebuild = rebuild_storage_filename
storage._shared_incref()
else:
fd, size = storage._share_fd_()
if sys.version_info[0] == 2:
df = multiprocessing.reduction.reduce_handle(fd)
else:
df = multiprocessing.reduction.DupFd(fd)
cache_key = fd_id(fd)
metadata = (df, size)
rebuild = rebuild_storage_fd
shared_cache[cache_key] = storage._weak_ref(StorageRef)
return (rebuild, (type(storage),) + metadata)
def reduce_storage(storage):
from . import get_sharing_strategy
if storage.is_cuda:
metadata = storage._share_cuda_()
cache_key = metadata[1]
rebuild = rebuild_storage_cuda
elif get_sharing_strategy() == 'file_system':
metadata = storage._share_filename_()
cache_key = metadata[1]
rebuild = rebuild_storage_filename
storage._shared_incref()
else:
fd, size = storage._share_fd_()
if sys.version_info[0] == 2:
df = multiprocessing.reduction.reduce_handle(fd)
else:
df = multiprocessing.reduction.DupFd(fd)
cache_key = fd_id(fd)
metadata = (df, size)
rebuild = rebuild_storage_fd
shared_cache[cache_key] = storage._weak_ref(StorageRef)
return (rebuild, (type(storage),) + metadata)
def reduce_storage(storage):
from . import get_sharing_strategy
if storage.is_cuda:
metadata = storage._share_cuda_()
cache_key = metadata[1]
rebuild = rebuild_storage_cuda
elif get_sharing_strategy() == 'file_system':
metadata = storage._share_filename_()
cache_key = metadata[1]
rebuild = rebuild_storage_filename
storage._shared_incref()
else:
fd, size = storage._share_fd_()
if sys.version_info[0] == 2:
df = multiprocessing.reduction.reduce_handle(fd)
else:
df = multiprocessing.reduction.DupFd(fd)
cache_key = fd_id(fd)
metadata = (df, size)
rebuild = rebuild_storage_fd
shared_cache[cache_key] = storage._weak_ref(StorageRef)
return (rebuild, (type(storage),) + metadata)
def reduce_storage(storage):
from . import get_sharing_strategy
if storage.is_cuda:
metadata = storage._share_cuda_()
cache_key = metadata[1]
rebuild = rebuild_storage_cuda
elif get_sharing_strategy() == 'file_system':
metadata = storage._share_filename_()
cache_key = metadata[1]
rebuild = rebuild_storage_filename
storage._shared_incref()
else:
fd, size = storage._share_fd_()
if sys.version_info[0] == 2:
df = multiprocessing.reduction.reduce_handle(fd)
else:
df = multiprocessing.reduction.DupFd(fd)
cache_key = fd_id(fd)
metadata = (df, size)
rebuild = rebuild_storage_fd
shared_cache[cache_key] = storage._weak_ref(StorageRef)
return (rebuild, (type(storage),) + metadata)
def rebuild_storage_fd(cls, df, size):
if sys.version_info[0] == 2:
fd = multiprocessing.reduction.rebuild_handle(df)
else:
fd = df.detach()
try:
storage = storage_from_cache(cls, fd_id(fd))
if storage is not None:
return storage
storage = cls._new_shared_fd(fd, size)
shared_cache[fd_id(fd)] = storage._weak_ref(StorageRef)
return storage
finally:
os.close(fd)
def rebuild_storage_fd(cls, df, size):
if sys.version_info[0] == 2:
fd = multiprocessing.reduction.rebuild_handle(df)
else:
fd = df.detach()
try:
storage = storage_from_cache(cls, fd_id(fd))
if storage is not None:
return storage
storage = cls._new_shared_fd(fd, size)
shared_cache[fd_id(fd)] = storage._weak_ref(StorageRef)
return storage
finally:
os.close(fd)
def rebuild_storage_fd(cls, df, size):
if sys.version_info[0] == 2:
fd = multiprocessing.reduction.rebuild_handle(df)
else:
fd = df.detach()
try:
storage = storage_from_cache(cls, fd_id(fd))
if storage is not None:
return storage
storage = cls._new_shared_fd(fd, size)
shared_cache[fd_id(fd)] = storage._weak_ref(StorageRef)
return storage
finally:
os.close(fd)
def rebuild_storage_fd(cls, df, size):
if sys.version_info[0] == 2:
fd = multiprocessing.reduction.rebuild_handle(df)
else:
fd = df.detach()
try:
storage = storage_from_cache(cls, fd_id(fd))
if storage is not None:
return storage
storage = cls._new_shared_fd(fd, size)
shared_cache[fd_id(fd)] = storage._weak_ref(StorageRef)
return storage
finally:
os.close(fd)