import threading from pybind11_tests import thread as m class Thread(threading.Thread): def __init__(self, fn): super().__init__() self.fn = fn self.e = None def run(self): try: for i in range(10): self.fn(i, i) except Exception as e: self.e = e def join(self): super().join() if self.e: raise self.e def test_implicit_conversion(): a = Thread(m.test) b = Thread(m.test) c = Thread(m.test) for x in [a, b, c]: x.start() for x in [c, b, a]: x.join() def test_implicit_conversion_no_gil(): a = Thread(m.test_no_gil) b = Thread(m.test_no_gil) c = Thread(m.test_no_gil) for x in [a, b, c]: x.start() for x in [c, b, a]: x.join()