Ex10: Successfull pyBind11
This commit is contained in:
		
							parent
							
								
									c5f7489717
								
							
						
					
					
						commit
						c6e48cf47c
					
				
					 4 changed files with 48 additions and 5 deletions
				
			
		
							
								
								
									
										20
									
								
								ex10/main.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								ex10/main.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,20 @@ | ||||||
|  | #!/usr/bin/env python3 | ||||||
|  | 
 | ||||||
|  | import ThreadPool | ||||||
|  | 
 | ||||||
|  | if __name__ == "__main__": | ||||||
|  |     print(dir(ThreadPool)) | ||||||
|  |     tp = ThreadPool.ThreadPool() | ||||||
|  | 
 | ||||||
|  |     print("Creating Consumers") | ||||||
|  |     tp.addConsumer( 2000, 20 ) | ||||||
|  |     tp.addConsumer( 2000, 10 ) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |     print("Create Producers") | ||||||
|  |     tp.addProducer( 4000, 5 ) | ||||||
|  | 
 | ||||||
|  |     print("Run all Threads") | ||||||
|  |     tp.run() | ||||||
|  | 
 | ||||||
|  |     print("End of Program") | ||||||
							
								
								
									
										8
									
								
								ex10/makefile
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								ex10/makefile
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,8 @@ | ||||||
|  | main: | ||||||
|  | 	g++ -pthread ThreadPool.cc main.cpp | ||||||
|  | 
 | ||||||
|  | threadpool: | ||||||
|  | 	g++ -pthread -D ENABLE_PYBIND=1 -O3 -Wall -shared -std=c++11 -fPIC `python3 -m pybind11 --includes` ThreadPool.cc -o ThreadPool`python3-config --extension-suffix` | ||||||
|  | 
 | ||||||
|  | clean: | ||||||
|  | 	rm -rf *.so __pycache__ | ||||||
|  | @ -19,22 +19,19 @@ class ThreadPool | ||||||
| 			_consumers(), | 			_consumers(), | ||||||
| 			_producers() | 			_producers() | ||||||
| 		{}; | 		{}; | ||||||
| 		auto addProducer( int max_t = 3000, int max_n = 10) | 		void addProducer( int max_t = 3000, int max_n = 10) | ||||||
| 		{ | 		{ | ||||||
| 			std::thread * tp = new std::thread( producer, _producers.size(), std::ref(_q), max_t, max_n ); | 			std::thread * tp = new std::thread( producer, _producers.size(), std::ref(_q), max_t, max_n ); | ||||||
| 
 | 
 | ||||||
| 			_producers.push_back(tp); | 			_producers.push_back(tp); | ||||||
| 
 | 
 | ||||||
| 			return tp; |  | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		auto addConsumer( int max_t = 2000, int max_n = 10) | 		void addConsumer( int max_t = 2000, int max_n = 10) | ||||||
| 		{ | 		{ | ||||||
| 			std::thread * tp = new std::thread( consumer, _consumers.size(), std::ref(_q), max_t, max_n ); | 			std::thread * tp = new std::thread( consumer, _consumers.size(), std::ref(_q), max_t, max_n ); | ||||||
| 
 | 
 | ||||||
| 			_consumers.push_back(tp); | 			_consumers.push_back(tp); | ||||||
| 
 |  | ||||||
| 			return tp; |  | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		void run() | 		void run() | ||||||
|  | @ -61,4 +58,22 @@ class ThreadPool | ||||||
| 		// queue
 | 		// queue
 | ||||||
| 		SharedQueue<int> _q; | 		SharedQueue<int> _q; | ||||||
| }; | }; | ||||||
|  | 
 | ||||||
|  | #if ENABLE_PYBIND | ||||||
|  | /*
 | ||||||
|  |  * Define Python access | ||||||
|  |  */ | ||||||
|  | #include <pybind11/pybind11.h> | ||||||
|  | 
 | ||||||
|  | namespace py = pybind11; | ||||||
|  | 
 | ||||||
|  | PYBIND11_MODULE(ThreadPool, tp) | ||||||
|  | { | ||||||
|  | 	py::class_<ThreadPool>( tp, "ThreadPool") | ||||||
|  | 		.def(py::init()) | ||||||
|  | 		.def("addProducer", &ThreadPool::addProducer, "Add a new Producer to the Pool") | ||||||
|  | 		.def("addConsumer", &ThreadPool::addConsumer, "Add a new Consumer to the Pool") | ||||||
|  | 		.def("run", &ThreadPool::run, "Run all registered Producers and Consumers"); | ||||||
|  | } | ||||||
|  | #endif | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
		Reference in a new issue