multiprocessing.pool 中的 Python ThreadPool 无法利用所有 CPU

标签 python multithreading

我在 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/

相关文章:

python - 将具有外键关系的两个模型数据传递给一个html模板

python - 在 plt 之外设置 matplotlib 颜色图的限制

c++ - 单处理器上的其他线程是否可以看到内存重新排序?

Android 单选按钮有时不会被选中

c# - C# 中的 Java WeakHashMap 类是否有等效项?

java - 系统升级后jvm崩溃

python - 如何减去与Python中不同时间间隔相对应的pandas列?

python - 尝试为 Python 安装 Pandas

python - 使用python(fastavro)解析多个相互引用的AVRO(avsc文件)

java - 如何在 Runnable 上设置参数然后获取值?