商汇粹外网资源平台

搜索
查看: 2024|回复: 6

pypy在什么情况下会比CPython慢很多?

[复制链接]

该用户从未签到

8

主题

27

帖子

107

积分

注册会员

Rank: 2

积分
107
发表于 2022-9-22 17:26:24 | 显示全部楼层 |阅读模式
背景:python初学者。
最近用python写了一个文本分析的小程序,主要是去除重复后用jieba来分词。可能因为算法问题,比较慢,处理1个5M的文件需要60s,后面听说pypy会快一些,就试了下,结果更慢了,需要240s,这也太离谱了吧。


目测在执行这个函数时花费时间极多:
def sortlist(list0,num):    listTemp=[]    for i in list0:        if not i in listTemp  and len(i[4])>num:   #len(i[4])>num 是为了筛选参与人数超过18人的对话,个人特殊用途            listTemp.append(i)    return listTemp

有大神能分析下吗?
回复

使用道具 举报

该用户从未签到

3

主题

31

帖子

109

积分

注册会员

Rank: 2

积分
109
发表于 2022-9-22 17:56:57 | 显示全部楼层
说个题外话,为何要用in list这种极其耗时的判断条件?大不了写个__hash__然后用set啊……
回复

使用道具 举报

该用户从未签到

3

主题

56

帖子

194

积分

注册会员

Rank: 2

积分
194
发表于 2022-9-22 18:27:30 | 显示全部楼层
pypy的numpy比原生的慢一倍
回复

使用道具 举报

该用户从未签到

4

主题

32

帖子

105

积分

注册会员

Rank: 2

积分
105
发表于 2022-9-22 18:58:03 | 显示全部楼层
C interface - ctypes vs cffi vs ...
https://bitbucket.org/pypy/pypy/issues/1237/pypy-2x-slower-than-python-on
回复

使用道具 举报

该用户从未签到

6

主题

39

帖子

156

积分

注册会员

Rank: 2

积分
156
发表于 2022-9-22 19:28:36 | 显示全部楼层
用生成式会更快
def sortlist(list0,num):
return [i for i in list(set(list0)) if len(i[4])>num]
回复

使用道具 举报

该用户从未签到

1

主题

28

帖子

117

积分

注册会员

Rank: 2

积分
117
发表于 2022-9-22 19:59:09 | 显示全部楼层
使用tornado的时候, 同样遇到了 pypy比 python 要 慢的 情况,而且慢了好多
回复

使用道具 举报

该用户从未签到

1

主题

28

帖子

117

积分

注册会员

Rank: 2

积分
117
发表于 2022-9-22 20:29:42 | 显示全部楼层
这是正常的,Python的pypy只是为了实现自举搞的一个解释器, Python肯定是比C语言慢的。
默认Python的解释器都是CPython,速度应该是最快的了。
-
这个回答是错的,见评论。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表