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()
							 |