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