>Даже если в питоне тоже вынести компиляцию то он не догоняет перл: $ time ./test.pl multi.txt Linux FreeBSD Solaris Cisco Opennet Bash pronounced Compilation Robbins Gentoo Portability SPARC OpenBSD Hurd OpenSolaris Linux FreeBSD Solaris Cisco Opennet Bash pronounced Compilation Robbins Gentoo Portability SPARC OpenBSD Hurd OpenSolaris Linux FreeBSD Solaris Cisco Opennet Bash pronounced Compilation Robbins Gentoo Portability SPARC OpenBSD Hurd OpenSolaris Linux FreeBSD Solaris Cisco Opennet Bash pronounced Compilation Robbins Gentoo Portability SPARC OpenBSD Hurd OpenSolaris > /dev/null
real 0m27.446s
user 0m26.965s
sys 0m0.150s
$ time ./test3.py multi.txt Linux FreeBSD Solaris Cisco Opennet Bash pronounced Compilation Robbins Gentoo Portability SPARC OpenBSD Hurd OpenSolaris Linux FreeBSD Solaris Cisco Opennet Bash pronounced Compilation Robbins Gentoo Portability SPARC OpenBSD Hurd OpenSolaris Linux FreeBSD Solaris Cisco Opennet Bash pronounced Compilation Robbins Gentoo Portability SPARC OpenBSD Hurd OpenSolaris Linux FreeBSD Solaris Cisco Opennet Bash pronounced Compilation Robbins Gentoo Portability SPARC OpenBSD Hurd OpenSolaris > /dev/null
real 0m14.922s
user 0m27.880s
sys 0m0.489s
$ cat test3.py
#!/usr/bin/env python
import os,sys,re,multiprocessing
exp=[re.compile(i) for i in sys.argv[2:]]
def matcher(lines):
elist=exp
return filter(lambda line: filter(lambda re: re.search(line), elist) , lines)
if __name__ == '__main__':
chunk = lambda ulist, step: map(lambda i: ulist[i:i+step], xrange(0, len(ulist), step))
pool = multiprocessing.Pool(processes=8)
data=open(sys.argv[1],'rb').readlines()
dlist=chunk(open(sys.argv[1],'rb').readlines(),int(len(data)/64))
print pool.map(matcher, dlist)