首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么Pandas在其内部操作为单线程时创建多个线程?

问为什么Pandas在其内部操作为单线程时创建多个线程?
EN

Stack Overflow用户
提问于 2020-03-25 05:37:59
回答 1查看 97关注 0票数 3

如果我没有弄错的话,Pandas的内部操作是单线程的。然而,我今天注意到,运行一个简单的程序,如下所示,将产生与正在创建的系统中的CPU核数目相同的线程数。为什么要创建这些额外的线程?

代码语言:javascript
复制
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命令,您将看到程序创建了许多线程(与系统中的核数一样多),并且只有一个内核处于繁忙状态。

在Ubuntu18.04上对大熊猫1.0.2和python 3.7进行了测试。

EN

回答 1

Stack Overflow用户

发布于 2022-03-10 09:56:39

我不能用现代熊猫复制这个:

代码语言:javascript
复制
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}

然而,现在有几个大熊猫的操作释放了吉尔或允许不同程度的平行下罩,见这个GitHub评论。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60843493

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档