[Python-Dev] new buffer in python2.7 (original) (raw)

Kristján Valur Jónsson kristjan at ccpgames.com
Wed Oct 27 16:32:02 CEST 2010


Sorry, here the tables properly formatted:

Function Name

Inclusive Samples

Exclusive Samples

Inclusive Samples %

Exclusive Samples %

apply_slice

8.997

468

62,23

3,24

_PyObject_GetItem

6.257

400

43,28

2,77

memory_subscript

5.857

1.051

40,51

7,27

_PyMemoryView_FromBuffer

2.642

455

18,27

3,15

memory_dealloc

1.572

297

10,87

2,05

_PyObject_Malloc

1.374

1.374

9,50

9,50

__PyObject_GC_New

1.256

236

8,69

1,63

_PySlice_New

1.211

333

8,38

2,30

slice_dealloc

1.061

769

7,34

5,32

__PyObject_GC_Malloc

1.022

293

7,07

2,03

bytearray_getbuffer

987

354

6,83

2,45

dup_buffer

932

932

6,45

6,45

Function Name

Inclusive Samples

Exclusive Samples

Inclusive Samples %

Exclusive Samples %

apply_slice

3.888

502

48,44

6,25

_PySequence_GetSlice

3.039

350

37,86

4,36

string_slice

2.689

281

33,50

3,50

_PyString_FromStringAndSize

2.409

575

30,01

7,16

[MSVCR90.dll]

1.413

1.407

17,61

17,53

string_dealloc

467

150

5,82

1,87

_PyObject_Malloc

379

379

4,72

4,72

_PyObject_Free

378

378

4,71

4,71

__PyEval_SliceIndex

347

347

4,32

4,32

-----Original Message----- From: python-dev-bounces+kristjan=ccpgames.com at python.org [mailto:python-dev-bounces+kristjan=ccpgames.com at python.org] On Behalf Of Kristján Valur Jónsson Sent: Wednesday, October 27, 2010 20:00 To: Antoine Pitrou; python-dev at python.org Subject: Re: [Python-Dev] new buffer in python2.7

Ah, well in 2.7 you don't have the luxury of a bytes object. A str() would be similar in 2.7 Anyway, isn't the "bytes" object immutable? In that case, it is not a useful target for a sock.recv_into() call.

Calling getbuffer on a bytearray or a bytes object should be really cheap, so I still don't accept this as a matter of fact situation.

Btw, going to 3.2 isn't a real option for us any time soon. A lot of companies probably find themselves in a similar situation. This is why I spend so much effort applying some love to 2.7. Most of the stuff I locally do to 2.7 I then contribute to python as 3.2 patches. Someday they'll get backported, no doubt :)

K

-----Original Message-----

From: python-dev-bounces+kristjan=ccpgames.com at python.org [mailto:python-dev-bounces+kristjan=ccpgames.com at python.org] On Behalf Of Antoine Pitrou

Sent: Wednesday, October 27, 2010 19:16

To: python-dev at python.org

Subject: Re: [Python-Dev] new buffer in python2.7

>Here are micro-benchmarks under 3.2:

> $ ./python -m timeit -s "x = b'x'*10000" "x[:100]"

> 10000000 loops, best of 3: 0.134 usec per loop $ ./python -m timeit

> -s "x = memoryview(b'x'*10000)" "x[:100]"

> 10000000 loops, best of 3: 0.151 usec per loop

That's weird. The greedy slice needs two memory allocations. One for

the ByteArray object itself, one for its cargo. In total, more that

100 bytes. In contrast, creating the MemoryView object requires only

one allocation of a few dozen bytes.

It's not a bytearray object, it's a bytes object. It requires only a single allocation since the data is allocated inline.

The memoryview object must also call getbuffer() again on the original object.

Regards

Antoine.


Python-Dev mailing list

Python-Dev at python.org<mailto:Python-Dev at python.org>

http://mail.python.org/mailman/listinfo/python-dev

Unsubscribe: http://mail.python.org/mailman/options/python-dev/kristjan%40ccpgames.com


Python-Dev mailing list

Python-Dev at python.org<mailto:Python-Dev at python.org>

http://mail.python.org/mailman/listinfo/python-dev

Unsubscribe: http://mail.python.org/mailman/options/python-dev/kristjan%40ccpgames.com

-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://mail.python.org/pipermail/python-dev/attachments/20101027/fb32c1c3/attachment-0001.html>



More information about the Python-Dev mailing list