2

我有一些利用 ctypes.CDLL 的 Python 代码,根据文档,这不涉及 gil。话虽如此,我在分析时遇到了一些我不清楚的瓶颈。如果我使用 time.sleep 甚至 ctypes.windll.kernel32.Sleep 运行一些琐碎的代码,我可以看到时间比例,因为线程数与任务数相匹配,换句话说,如果任务要休眠 1 秒并且我在 1 个线程中提交 1 个任务或在 20 个线程中提交 20 个任务,它们都需要大约 1 秒才能完成。

切换回我的代码,它没有按预期扩展,而是线性扩展。分析表明 _thread.lock 中的 acquire() 等待。

有哪些技术可以进一步深入研究以了解问题在哪里体现?ThreadPoolExecutor 不是这里的最佳选择吗?我知道它实现了一个基本的线程池,与 multiprocessing.pool 中的 ThreadPool 没有什么不同?

4

0 回答 0