chore: import upstream snapshot with attribution
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
# Copyright (c) Facebook, Inc. and its affiliates.
|
||||
#
|
||||
# This source code is licensed under the MIT license found in the
|
||||
# LICENSE file in the root directory of this source tree.
|
||||
|
||||
import multiprocessing
|
||||
import os
|
||||
import pdb
|
||||
import sys
|
||||
|
||||
|
||||
__all__ = ["set_trace"]
|
||||
|
||||
|
||||
_stdin = [None]
|
||||
_stdin_lock = multiprocessing.Lock()
|
||||
try:
|
||||
_stdin_fd = sys.stdin.fileno()
|
||||
except Exception:
|
||||
_stdin_fd = None
|
||||
|
||||
|
||||
class MultiprocessingPdb(pdb.Pdb):
|
||||
"""A Pdb wrapper that works in a multiprocessing environment.
|
||||
|
||||
Usage: `from fairseq import pdb; pdb.set_trace()`
|
||||
"""
|
||||
|
||||
def __init__(self):
|
||||
pdb.Pdb.__init__(self, nosigint=True)
|
||||
|
||||
def _cmdloop(self):
|
||||
stdin_bak = sys.stdin
|
||||
with _stdin_lock:
|
||||
try:
|
||||
if _stdin_fd is not None:
|
||||
if not _stdin[0]:
|
||||
_stdin[0] = os.fdopen(_stdin_fd)
|
||||
sys.stdin = _stdin[0]
|
||||
self.cmdloop()
|
||||
finally:
|
||||
sys.stdin = stdin_bak
|
||||
|
||||
|
||||
def set_trace():
|
||||
pdb = MultiprocessingPdb()
|
||||
pdb.set_trace(sys._getframe().f_back)
|
||||
Reference in New Issue
Block a user