This issue tracker has been migrated to GitHub ,
and is currently read-only.
For more information,
see the GitHub FAQs in the Python's Developer Guide.
Created on 2012年08月15日 14:10 by Robin.Schreiber, last changed 2022年04月11日 14:57 by admin. This issue is now closed.
| Files | ||||
|---|---|---|---|---|
| File name | Uploaded | Description | Edit | |
| _random_pep3121-384_v0.patch | Robin.Schreiber, 2012年08月15日 14:10 | |||
| Messages (9) | |||
|---|---|---|---|
| msg168297 - (view) | Author: Robin Schreiber (Robin.Schreiber) * (Python triager) | Date: 2012年08月15日 14:10 | |
Changes proposed in PEP3121 and PEP384 have now been applied to the lsprof module! |
|||
| msg168299 - (view) | Author: Raymond Hettinger (rhettinger) * (Python committer) | Date: 2012年08月15日 14:25 | |
Martin, does this patch match your intent with PEP3121 and PEP384? |
|||
| msg168437 - (view) | Author: Martin v. Löwis (loewis) * (Python committer) | Date: 2012年08月17日 08:24 | |
Sure; I've mentored Robin throughout the summer with this, and this is his GSoC project. As for the specific change: this is primarily to support PEP 3121, and allowing multiple interpreters to use a module without fear of global variables being shared across interpreters. In the current implementation, the Random type would be shared across all interpreters, with the change, each interpreter gets its own copy of the Random type. For that, the type needs to become a heap type, which is best done with the PEP 384 API (even though ABI stability is irrelevant for the random module). |
|||
| msg168514 - (view) | Author: Stefan Krah (skrah) * (Python committer) | Date: 2012年08月18日 14:09 | |
I tried to benchmark this patch but I'm getting a segfault: Python 3.3.0b2+ (default:dc18d73e67a5, Aug 18 2012, 15:37:04) [GCC 4.4.3] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import random Segmentation fault |
|||
| msg168516 - (view) | Author: Mark Dickinson (mark.dickinson) * (Python committer) | Date: 2012年08月18日 15:35 | |
The Py_tp_bases line below doesn't look right. I suspect that's what's causing the segfault.
+static PyType_Slot Random_Type_slots[] = {
+ {Py_tp_getattro, PyObject_GenericGetAttr},
+ {Py_tp_doc, random_doc},
+ {Py_tp_methods, random_methods},
+ {Py_tp_new, random_new},
+ {Py_tp_free, PyObject_Free},
+ {Py_tp_bases, },
+ {0, 0}
|
|||
| msg168518 - (view) | Author: Mark Dickinson (mark.dickinson) * (Python committer) | Date: 2012年08月18日 16:16 | |
With the Py_tp_bases line removed, all tests pass for me on a non-debug 64-bit build on OS X 10.6. A quick timing of random.random() showed no distinguishable performance impact. |
|||
| msg168519 - (view) | Author: Stefan Krah (skrah) * (Python committer) | Date: 2012年08月18日 17:13 | |
Thanks, Mark. With your change applied I can't measure any performance differences either. |
|||
| msg372079 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2020年06月22日 09:37 | |
The PEP 384 part was fixed by: commit 04f0bbfbedf8d2bb69b012f853de6648b1a9f27f Author: Dino Viehland <dinoviehland@fb.com> Date: Fri Sep 13 11:12:27 2019 +0100 bpo-38075: Port _randommodule.c to PEP-384 (GH-15798) - Migrate `Random_Type` to `PyType_FromSpec` - To simulate an old use of `PyLong_Type.tp_as_number->nb_absolute`, I added code to the module init function to stash `int.__abs__` for later use. Ideally we'd use `PyType_GetSlot()` instead, but it doesn't currently work for static types in CPython, and implementing it just for this case doesn't seem worth it. - Do exact check for long and dispatch to PyNumber_Absolute, use vector call when not exact. |
|||
| msg381416 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2020年11月19日 14:01 | |
commit cc0cd43c0f96dac413e54855e9c77ec4b73bd2f8 Author: Christian Heimes <christian@python.org> Date: Thu Nov 19 08:46:29 2020 +0100 bpo-1635741: Port _random to multiphase initialization (GH-23359) See bpo-41111 "Convert a few stdlib extensions to the limited C API". |
|||
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2022年04月11日 14:57:34 | admin | set | github: 59873 |
| 2020年11月19日 14:01:02 | vstinner | set | status: open -> closed superseder: Py_Finalize() doesn't clear all Python objects at exit messages: + msg381416 resolution: duplicate stage: resolved |
| 2020年06月22日 09:37:08 | vstinner | set | nosy:
+ vstinner messages: + msg372079 |
| 2014年05月13日 21:55:06 | skrah | set | nosy:
- skrah |
| 2012年11月08日 13:28:16 | Robin.Schreiber | set | keywords: + pep3121, - patch |
| 2012年08月27日 03:42:36 | belopolsky | link | issue15787 dependencies |
| 2012年08月18日 17:13:43 | skrah | set | messages: + msg168519 |
| 2012年08月18日 16:16:53 | mark.dickinson | set | messages: + msg168518 |
| 2012年08月18日 15:35:40 | mark.dickinson | set | nosy:
+ mark.dickinson messages: + msg168516 |
| 2012年08月18日 14:09:14 | skrah | set | nosy:
+ skrah messages: + msg168514 |
| 2012年08月17日 08:24:53 | loewis | set | messages: + msg168437 |
| 2012年08月15日 14:25:02 | rhettinger | set | assignee: loewis messages: + msg168299 nosy: + loewis |
| 2012年08月15日 14:10:36 | Robin.Schreiber | create | |