import multiprocessing from multiprocessing.pool import ThreadPool from time import sleep def do_calculation(data): sleep(10) return data * 2 if __name__ == '__main__': pool_size = multiprocessing.cpu_count() * 4 # pool_size = 2 print pool_size pool = ThreadPool(processes=pool_size) inputs = list(range(10)) print 'Input :', inputs pool_outputs = pool.map(do_calculation, inputs) print 'Pool :', pool_outputs
Запускается это дело на линуксах
Количество тредов смотрю вот так:
ps awux -L | grep test_threadpool
На тачках, где 4 и 16 ядер, к размеру pool_size оно добавляет 4 треда, на тачке с 2-мя ядрами, добавляет 3 треда.
В общем, если
print pool_size
sergius 31269 31269 1.0 8 0.0 65688 3940 pts/3 Sl+ 18:07 0:00 python test_threadpool.py sergius 31269 31270 0.0 8 0.0 65688 3940 pts/3 Sl+ 18:07 0:00 python test_threadpool.py sergius 31269 31271 0.0 8 0.0 65688 3940 pts/3 Sl+ 18:07 0:00 python test_threadpool.py sergius 31269 31272 0.0 8 0.0 65688 3940 pts/3 Sl+ 18:07 0:00 python test_threadpool.py sergius 31269 31273 0.0 8 0.0 65688 3940 pts/3 Sl+ 18:07 0:00 python test_threadpool.py sergius 31269 31274 0.0 8 0.0 65688 3940 pts/3 Sl+ 18:07 0:00 python test_threadpool.py sergius 31269 31275 0.0 8 0.0 65688 3940 pts/3 Sl+ 18:07 0:00 python test_threadpool.py sergius 31269 31276 0.0 8 0.0 65688 3940 pts/3 Sl+ 18:07 0:00 python test_threadpool.py
в тестировании принимали участие python 2.6 и 2.7
А поскольку в самом продукте ещё некоторые обертки имеются, то в нем уж количество тредов вообще непонятно с чем коррелируется, к примеру при значении 8 в итоге выходит 32 треда, при значении 2 - 14 тредов. Вот эту загадку мне надо решить. Но для начала надо разобраться как же работает этот ThreadPool
Надеюсь на вашу помощь, господа форумчане.