mmap class has slow "in" operator

Gabriel Genellina gagsl-py2 at yahoo.com.ar
Mon Jun 2 23:53:11 EDT 2008


En Thu, 29 May 2008 19:17:05 -0300, Kris Kennaway <kris at FreeBSD.org>  
escribió:

> If I do the following:
>
> def mmap_search(f, string):
> 	fh = file(f)
> 	mm = mmap.mmap(fh.fileno(), 0, mmap.MAP_SHARED, mmap.PROT_READ)
>
> 	return mm.find(string)
>
> def mmap_is_in(f, string):
> 	fh = file(f)
> 	mm = mmap.mmap(fh.fileno(), 0, mmap.MAP_SHARED, mmap.PROT_READ)
>
> 	return string in mm
>
> then a sample mmap_search() call on a 50MB file takes 0.18 seconds, but  
> the mmap_is_in() call takes 6.6 seconds.  Is the mmap class missing an  
> operator and falling back to a slow default implementation?  Presumably  
> I can implement the latter in terms of the former.

Looks like you should define the sq_contains member in mmap_as_sequence,  
and the type should have the Py_TPFLAGS_HAVE_SEQUENCE_IN flag set (all in  
mmapmodule.c)

-- 
Gabriel Genellina




More information about the Python-list mailing list