gpt4 book ai didi

pandas - 为什么 Pandas 创建多个线程,而其内部操作是单线程的?

转载 作者:行者123 更新时间:2023-12-05 07:11:16 24 4
gpt4 key购买 nike

如果我没记错的话,Pandas 的内部操作是单线程的。然而,我今天注意到,运行如下所示的简单程序将导致与正在创建的系统中可用的 CPU 核心数一样多的线程。为什么它会创建这些额外的线程?

import threading
import pandas as pd

def use_some_cpu(row):
print(f'thread id={threading.get_ident()}')
x = 1.001
for i in range(100000):
x *= 1.001

df = pd.DataFrame(list(range(0, 10000)), columns=['foo'])
df.apply(use_some_cpu, axis=1)

如果您尝试运行该程序,您会看到打印出的所有 thred id 值都是相同的,这意味着实际处理是从单个线程完成的。但是,使用 htop 命令,您会看到程序创建了很多线程(与系统中的核心数一样多),只有一个核心处于忙碌状态。

测试是在 Ubuntu 18.04 上用 pandas 1.0.2 和 python 3.7 完成的。

最佳答案

我不能用现代 Pandas 重现这个:

In [2]: import threading
...: import pandas as pd
...:
...: thread_ids = set()
...:
...: def use_some_cpu(row):
...: thread_ids.add(threading.get_ident())
...: x = 1.001
...: for i in range(100000):
...: x *= 1.001
...:
...: df = pd.DataFrame(list(range(0, 10000)), columns=['foo'])
...: df.apply(use_some_cpu, axis=1)
Out[2]:
0 None
1 None
2 None
3 None
4 None
...
9995 None
9996 None
9997 None
9998 None
9999 None
Length: 10000, dtype: object

In [3]: thread_ids
Out[3]: {140372742666048}

然而,如今一些 pandas 操作发布了 GIL 或允许在引擎盖下进行不同程度的并行,请参阅 this GitHub comment .

关于pandas - 为什么 Pandas 创建多个线程,而其内部操作是单线程的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60843493/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com