我在 Python 中有一些字符串处理工作。我希望加快这项工作 通过使用线程池。字符串处理作业对每个都没有依赖性 其他。结果将存储到 mongodb 数据库中。
我的代码如下:
thread_pool_size = multiprocessing.cpu_count()
pool = ThreadPool(thread_pool_size)
for single_string in string_list:
pool.apply_async(_process, [single_string ])
pool.close()
pool.join()
def _process(s):
# Do staff, pure python string manipulation.
# Save the output to a database (pyMongo).
我尝试在具有 8 个 CPU 内核的 Linux 机器上运行代码。结果是 最大 CPU 使用率只能在 130% 左右(从顶部读取),当我 运行作业几分钟。
我使用线程池的方法是否正确?有更好的方法吗?
最佳答案
您可能会检查使用多个进程而不是多个线程。 Here是两个选项的一个很好的比较。在其中一条评论中指出,Python 无法在处理多个线程时使用多个 CPU(由于全局解释器锁)。因此,您不应使用线程池,而应使用进程池来充分利用您的机器。
关于multiprocessing.pool 中的 Python ThreadPool 无法利用所有 CPU,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29910286/