|
7 | 7 | # Licensed to PSF under a Contributor Agreement. |
8 | 8 | # |
9 | 9 |
|
| 10 | +from abc import ABCMeta, abstractmethod |
10 | 11 | import copyreg |
11 | 12 | import functools |
12 | 13 | import io |
@@ -238,3 +239,36 @@ def _rebuild_socket(df, family, type, proto): |
238 | 239 | fd = df.detach() |
239 | 240 | return socket.socket(family, type, proto, fileno=fd) |
240 | 241 | register(socket.socket, _reduce_socket) |
| 242 | + |
| 243 | + |
| 244 | +class AbstractReducer(metaclass=ABCMeta): |
| 245 | + '''Abstract base class for use in implementing a Reduction class |
| 246 | + suitable for use in replacing the standard reduction mechanism |
| 247 | + used in multiprocessing.''' |
| 248 | + ForkingPickler = ForkingPickler |
| 249 | + register = register |
| 250 | + dump = dump |
| 251 | + send_handle = send_handle |
| 252 | + recv_handle = recv_handle |
| 253 | + |
| 254 | + if sys.platform == 'win32': |
| 255 | + steal_handle = steal_handle |
| 256 | + duplicate = duplicate |
| 257 | + DupHandle = DupHandle |
| 258 | + else: |
| 259 | + sendfds = sendfds |
| 260 | + recvfds = recvfds |
| 261 | + DupFd = DupFd |
| 262 | + |
| 263 | + _reduce_method = _reduce_method |
| 264 | + _reduce_method_descriptor = _reduce_method_descriptor |
| 265 | + _rebuild_partial = _rebuild_partial |
| 266 | + _reduce_socket = _reduce_socket |
| 267 | + _rebuild_socket = _rebuild_socket |
| 268 | + |
| 269 | + def __init__(self, *args): |
| 270 | + register(type(_C().f), _reduce_method) |
| 271 | + register(type(list.append), _reduce_method_descriptor) |
| 272 | + register(type(int.__add__), _reduce_method_descriptor) |
| 273 | + register(functools.partial, _reduce_partial) |
| 274 | + register(socket.socket, _reduce_socket) |
0 commit comments