pyp "mm | p if n==0 else (p[:-2] + [(int(x)%12) for x in p[-2:]]) | mm"然而,这被证明是令人惊讶的缓慢。如果我使用以下命令创建测试文件
for j in xrange(50000):
print ",".join(str(i) for i in [random.choice(xrange(1000)) for i in xrange(8)])然后运行
time (cat testmedium.txt |~/.local/bin/pyp "mm | p if n==0 else (p[:-2] + [(int(x)%12) for x in p[-2:]]) | mm" > /dev/null)我得到了
real 1m27.889s
user 1m26.941s
sys 0m0.688s然而,perl中的等价物几乎是即时的。
time (cat testmedium.txt |perl -l -a -F',' -p -e'if ($. > 1) { $F[6] %=12; $F[7] %= 12;$_ = join(q{,}, @F[6,7]) }' > /dev/null)
real 0m0.196s
user 0m0.192s
sys 0m0.012s发布于 2013-05-06 02:52:47
这个代码..。
import sys
for index,line in enumerate(sys.stdin):
if index == 0:
print line
else:
values = line.split(',')
values[-2:] = [str(int(x)%12) for x in values[-2:]]
print ','.join(values)在不到一秒钟的时间内运行(使用与您使用的相同方法生成的测试文件):
$ time (cat test.txt | python foo.py > /dev/null)
real 0m0.363s
user 0m0.339s
sys 0m0.032s因此,如果你遇到问题,这可能是pyp正在尝试做的事情的低效。
发布于 2014-05-23 10:48:04
这是对您的问题的间接回答@marshall。
首先,我想说对我来说,pyp最大的优势是不必学习另一门语言,而且我通常不需要处理大量的数据,所以它非常适合我的需求。
alias 'pl=pypy /usr/bin/pyp'然后我用pyp和pl运行这个命令
lr | pl "'doc',p, p.replace('e','EEE')+'.xpg' | pp.reverse() | ''.join(p)" | pl "d|u"对于更大的目录集,它是470秒和250秒。在此操作过程中,Python和PyPy一样,100%地运行在一个内核上。
https://stackoverflow.com/questions/16387709
复制相似问题