线程池控制
threadpoolctl的Python项目详细描述
线程池控件
python helpers来限制 用于科学研究的公共本机库的线程池 计算和数据科学(如BLAS和OpenMP)。
对底层线程池大小的精细控制在 涉及嵌套并行以减轻 超额认购问题。
安装
对于用户,请从pypi安装最新发布的版本:
pip install threadpoolctl
对于贡献者,从developer中的源存储库安装 模式:
pip install -r dev-requirements.txt flit install --symlink
然后使用pytest运行测试:
pytest
用法
运行时内省
反思启用线程池的运行库的当前状态 导入python包时加载的:
>>>fromthreadpoolctlimportthreadpool_info>>>frompprintimportpprint>>>pprint(threadpool_info())[]>>>importnumpy>>>pprint(threadpool_info())[{'filepath':'/opt/venvs/py37/lib/python3.7/site-packages/numpy/.libs/libopenblasp-r0-382c8f3a.3.5.dev.so','internal_api':'openblas','num_threads':4,'prefix':'libopenblas','user_api':'blas','version':'0.3.5.dev'}]>>>importxgboost>>>pprint(threadpool_info())[{'filepath':'/opt/venvs/py37/lib/python3.7/site-packages/numpy/.libs/libopenblasp-r0-382c8f3a.3.5.dev.so','internal_api':'openblas','num_threads':4,'prefix':'libopenblas','user_api':'blas','version':'0.3.5.dev'},{'filepath':'/opt/venvs/py37/lib/python3.7/site-packages/scipy/.libs/libopenblasp-r0-8dca6697.3.0.dev.so','internal_api':'openblas','num_threads':4,'prefix':'libopenblas','user_api':'blas','version':None},{'filepath':'/usr/lib/x86_64-linux-gnu/libgomp.so.1','internal_api':'openmp','num_threads':4,'prefix':'libgomp','user_api':'openmp','version':None}]< H3>设置线程池的最大大小< EH3>
控制底层运行库使用的线程数 在python程序的特定部分:
fromthreadpoolctlimportthreadpool_limitsimportnumpyasnpwiththreadpool_limits(limits=1,user_api='blas'):# In this block, calls to blas implementation (like openblas or MKL)# will be limited to use only one thread. They can thus be used jointly# with thread-parallelism.a=np.random.randn(1000,1000)a_squared=a@a
已知限制
threadpool_limits
在嵌套的并行循环中不按预期工作
由不同的openmp运行时实现(例如libgomp)管理
来自gcc和clang/llvm的libomp或来自icc的libiomp)。
请参见tests/test_threadpoolctl.py
中的test_openmp_nesting()
函数。
举个例子。
维护人员
发布:
pip install flit flit build
检查dist/
的含量。
如果一切正常,请提交发布,标记它,并按 标记到github,然后:
flit publish