43 lines
		
	
	
		
			826 B
		
	
	
	
		
			Python
		
	
	
			
		
		
	
	
			43 lines
		
	
	
		
			826 B
		
	
	
	
		
			Python
		
	
	
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()
 |