1

I found Python multiprocessing.reduction module while suffering from sharing a file descriptor between processes in here.

My question is, what does reduction module do internally to share the file descriptor between processes.(reduce_handle(), rebuild_handle() method)

Could you explain in detail?

#reduction.py
def reduce_handle(handle):
    if Popen.thread_is_spawning():
        return (None, Popen.duplicate_for_child(handle), True)
    dup_handle = duplicate(handle)
    _cache.add(dup_handle)
    sub_debug('reducing handle %d', handle)
    return (_get_listener().address, dup_handle, False)

def rebuild_handle(pickled_data):
    address, handle, inherited = pickled_data
    if inherited:
        return handle
    sub_debug('rebuilding handle %d', handle)
    conn = Client(address, authkey=current_process().authkey)
    conn.send((handle, os.getpid()))
    new_handle = recv_handle(conn)
    conn.close()
    return new_handle
Community
  • 1
  • 1
SangminKim
  • 8,358
  • 14
  • 69
  • 125

0 Answers0