msg99718 - (view) |
Author: Willard (cptnwillard) |
Date: 2010-02-22 10:46 |
The following script raises several "_strptime_time" AttributeErrors (on OS X 10.4 at least).
If time.strptime is used before starting the threads, then no exception is raised (the issue may thus come from strptime.py not being imported in a thread safe manner).
import time
import thread
def f():
for m in xrange(1, 13):
for d in xrange(1,29):
time.strptime("2010%02d%02d"%(m,d),"%Y%m%d")
for _ in xrange(10):
thread.start_new_thread(f, ())
time.sleep(3)
> Traceback (most recent call last):
> File "[...]/test.py", line 75, in f
> time.strptime("2010%02d%02d"%(m,d),"%Y%m%d")
> AttributeError: _strptime_time
|
msg99724 - (view) |
Author: Eric V. Smith (eric.smith) * |
Date: 2010-02-22 12:05 |
With 10.6's stock python, I've had this test either work or crash Python.
On trunk, I get it to either work or give the same error as the original report.
Unfortunately I've been unable to get it to crash again in a debugger so I can get a stack trace. But I'm still trying.
|
msg99725 - (view) |
Author: Amaury Forgeot d'Arc (amaury.forgeotdarc) * |
Date: 2010-02-22 12:19 |
Which version is "10.6's stock python"? Note that r59678 fixed a "problem with dead locks when mixin threads and imports".
|
msg99726 - (view) |
Author: Eric V. Smith (eric.smith) * |
Date: 2010-02-22 12:24 |
Oops, sorry for not specifying that. It's:
Python 2.6.4 (r264:75706, Jan 27 2010, 12:09:19)
[GCC 4.2.1 (Apple Inc. build 5646) (dot 1)] on darwin
|
msg99749 - (view) |
Author: Brett Cannon (brett.cannon) * |
Date: 2010-02-22 15:34 |
Lib/_strptime.py itself should be thread-safe. I am guessing that it has something to do with the way the C code in time.c imports _strptime.py. A possible solution if it is the C code's import stuff is to create a time.py that imports a _time.c, but that's a total guess as to whether that will solve anything.
|
msg99754 - (view) |
Author: Amaury Forgeot d'Arc (amaury.forgeotdarc) * |
Date: 2010-02-22 15:49 |
It would be easier to move the PyImport_ImportModuleNoBlock("_strptime") currently in strptime() into the timemodule.c init function.
|
msg99768 - (view) |
Author: R. David Murray (r.david.murray) * |
Date: 2010-02-22 16:09 |
FYI there's been a proposal to create a time.py module anyway in order to add some pure python functions not worth writing in c.
|
msg99803 - (view) |
Author: R. David Murray (r.david.murray) * |
Date: 2010-02-22 18:29 |
For reference, it's issue 7989.
|
msg99805 - (view) |
Author: Eric V. Smith (eric.smith) * |
Date: 2010-02-22 18:31 |
I just tried it again under gdb on MacOS 10.6, the supplied python 2.6.4 and got this backtrace:
Program received signal SIGTRAP, Trace/breakpoint trap.
[Switching to process 61133]
0x00007fff87a4b790 in __CFInitialize ()
(gdb) bt
#0 0x00007fff87a4b790 in __CFInitialize ()
#1 0x00007fff5fc0d5ce in __dyld__ZN16ImageLoaderMachO11doImageInitERKN11ImageLoader11LinkContextE ()
#2 0x00007fff5fc0d607 in __dyld__ZN16ImageLoaderMachO16doInitializationERKN11ImageLoader11LinkContextE ()
#3 0x00007fff5fc0bcec in __dyld__ZN11ImageLoader23recursiveInitializationERKNS_11LinkContextEj ()
#4 0x00007fff5fc0bc9d in __dyld__ZN11ImageLoader23recursiveInitializationERKNS_11LinkContextEj ()
#5 0x00007fff5fc0bc9d in __dyld__ZN11ImageLoader23recursiveInitializationERKNS_11LinkContextEj ()
#6 0x00007fff5fc0bda6 in __dyld__ZN11ImageLoader15runInitializersERKNS_11LinkContextE ()
#7 0x00007fff5fc08fbb in __dyld_dlopen ()
#8 0x00007fff8276fe00 in dlopen ()
#9 0x00000001000e876f in _PyImport_GetDynLoadFunc ()
#10 0x00000001000d2ce4 in _PyImport_LoadDynamicModule ()
#11 0x00000001000d0fbf in import_submodule ()
#12 0x00000001000d14da in load_next ()
#13 0x00000001000d17ec in PyImport_ImportModuleLevel ()
#14 0x00000001000aeeb3 in builtin___import__ ()
#15 0x000000010000c092 in PyObject_Call ()
#16 0x00000001000b00e7 in PyEval_CallObjectWithKeywords ()
#17 0x00000001000b43ae in PyEval_EvalFrameEx ()
#18 0x00000001000b8fd0 in PyEval_EvalCodeEx ()
#19 0x00000001000b90b6 in PyEval_EvalCode ()
#20 0x00000001000cdeb0 in PyImport_ExecCodeModuleEx ()
#21 0x00000001000cf112 in load_source_module ()
#22 0x00000001000d0fbf in import_submodule ()
#23 0x00000001000d14da in load_next ()
#24 0x00000001000d17ec in PyImport_ImportModuleLevel ()
#25 0x00000001000aeeb3 in builtin___import__ ()
#26 0x000000010000c092 in PyObject_Call ()
#27 0x00000001000b00e7 in PyEval_CallObjectWithKeywords ()
#28 0x00000001000b43ae in PyEval_EvalFrameEx ()
#29 0x00000001000b8fd0 in PyEval_EvalCodeEx ()
#30 0x00000001000b90b6 in PyEval_EvalCode ()
#31 0x00000001000cdeb0 in PyImport_ExecCodeModuleEx ()
#32 0x00000001000cf112 in load_source_module ()
#33 0x00000001000d0fbf in import_submodule ()
#34 0x00000001000d14da in load_next ()
#35 0x00000001000d17ec in PyImport_ImportModuleLevel ()
#36 0x00000001000aeeb3 in builtin___import__ ()
#37 0x000000010000c092 in PyObject_Call ()
#38 0x000000010000fbe5 in PyObject_CallFunction ()
#39 0x00000001000d1f9b in PyImport_Import ()
#40 0x00000001000d250f in PyImport_ImportModuleNoBlock ()
#41 0x0000000100515733 in time_strptime ()
#42 0x00000001000b8278 in PyEval_EvalFrameEx ()
#43 0x00000001000b8fd0 in PyEval_EvalCodeEx ()
#44 0x000000010003b355 in function_call ()
#45 0x000000010000c092 in PyObject_Call ()
#46 0x00000001000b00e7 in PyEval_CallObjectWithKeywords ()
#47 0x00000001000ef7ae in t_bootstrap ()
#48 0x00007fff827a2f8e in _pthread_start ()
#49 0x00007fff827a2e41 in thread_start ()
(gdb)
|
msg99807 - (view) |
Author: R. David Murray (r.david.murray) * |
Date: 2010-02-22 18:36 |
Attribute error confirmed on linux on trunk and py3k.
|
msg118005 - (view) |
Author: MunSic JEONG (ruseel) |
Date: 2010-10-05 12:16 |
Attribute error confirmed on OSX, and py3k.
http://codereview.appspot.com/2371041
|
msg118021 - (view) |
Author: Alexander Belopolsky (belopolsky) * |
Date: 2010-10-05 17:10 |
MunSic,
It looks like issue7980.patch is just a unit test. Do you have a patch to fix the issue?
|
msg118022 - (view) |
Author: Alexander Belopolsky (belopolsky) * |
Date: 2010-10-05 17:16 |
RDM> FYI there's been a proposal to create a time.py module anyway
RDM> in order to add some pure python functions not worth writing in c.
RDM> For reference, it's issue 7989.
Issue #7989 was retargeted to deal with datetime module. The time.py issue is #9528.
|
msg118338 - (view) |
Author: MunSic JEONG (ruseel) |
Date: 2010-10-10 16:42 |
> Do you have a patch to fix the issue?
no, I don't. I just wanted to move stage from "unittest needed" to "needs patch" :)
After reading issue8098, now I realized that this is broad issue as belopolsky said in msg110095.
For new reader of this issue after me, I would like to share my understanding.
Patch like below can solve this ticket. (changing "ImportModuleNoBlock" call to "ImportNoBlock")
static PyObject *
time_strptime(PyObject *self, PyObject *args)
{
- PyObject *strptime_module = PyImport_ImportModuleNoBlock("_strptime");
+ PyObject *strptime_module = PyImport_ImportModule("_strptime");
But "the function PyImport_ImportModuleNoBlock() was introduced and used in modules such as the time module to supposedly avoid deadlocks when using threads."
So we could not apply that patch.
|
msg118530 - (view) |
Author: Alexander Belopolsky (belopolsky) * |
Date: 2010-10-13 15:26 |
It seems to me that this is related to if not a duplicate of issue 8098.
|
msg127872 - (view) |
Author: Carlos Corbacho (ccorbacho) |
Date: 2011-02-04 08:08 |
As per my comments on Issue11108 - I suspect that PyImport_ImportModuleNoBlock is a bit of a red herring here - in Python 2.5 and earlier versions (well before PyImport_ImportModuleNoBlock was added), we have occasionally seen 'AttributeError: strptime' from threaded code calling time.strptime(), so whatever this bug is, I don't believe it's caused by the call now being non-blocking from 2.6 onwards.
|
msg147110 - (view) |
Author: Zsolt Kendi (kzsolt) |
Date: 2011-11-05 20:59 |
I recognize the same problem problem at linux with 4 core 64 processor. The python version is 2.6.5 . Looks like occured randomly but maybe this is depend from thread sequence.
|
msg160270 - (view) |
Author: Antoine Pitrou (pitrou) * |
Date: 2012-05-09 11:12 |
For the record, issue9260 proposes to fix the issues with PyImport_ImportModuleNoBlock.
|
msg184067 - (view) |
Author: William McBrine (William.McBrine) |
Date: 2013-03-13 03:53 |
I'm still seeing this, in the 2.7.2 that comes with OS X 10.8.2.
|
msg206340 - (view) |
Author: David Palms (dpalms2011) |
Date: 2013-12-16 18:25 |
I am still seeing this in 2.7.5, has a patch been created yet?
|
msg206393 - (view) |
Author: R. David Murray (r.david.murray) * |
Date: 2013-12-17 02:11 |
There's no patch posted here, and the issue is still open, so no.
On the other hand, the way imports are handled in 3.3 and later is a bit different, and if I run the unit test (which does still fail for me on 2.7 tip) on 3.3 and 3.4 tip it passes.
Given that, I'm guessing it is likely that none of the current Python committers are going to have time to look in to this, so unless someone else comes up with a patch, it isn't likely to get fixed in 2.7.
|
msg214013 - (view) |
Author: Stéphane Wirtel (matrixise) * |
Date: 2014-03-18 20:16 |
This bug has not been fixed in 2.7.6 on OSX 10.9.2.
|
msg214014 - (view) |
Author: Romuald Brunet (Romuald) * |
Date: 2014-03-18 20:26 |
This is a patch attempt to fix issue: import the _strptime module at time / datetime module load instead of method call.
Please note that the test is not fully reliable: it may pass without the patch / on current version, since threaded execution isn't controlled
|
msg215900 - (view) |
Author: Antoine Pitrou (pitrou) * |
Date: 2014-04-10 19:34 |
There are probably reasons why the import is currently done lazily, so I would advise against changing this in 2.7, unless the reasons are investigated and clearly understood.
|
msg221094 - (view) |
Author: Fred Wheeler (fredwheeler) |
Date: 2014-06-20 15:03 |
This issue should be noted in the documentation of strptime in the time and datetime modules and/or the thread module. As it stands there is no good way for a user of these modules to learn of this problem until one day the right race conditions exist to expose the problem.
Perhaps the following notes will do?
https://docs.python.org/2/library/time.html#time.strptime
Thread safety: The use of strptime is thread safe, but with one important caveat. The first use of strptime is not thread safe because the first use will import _strptime. That import is not thread safe and may throw AttributeError or ImportError. To avoid this issue, import _strptime explicitly before starting threads, or call strptime once before starting threads.
https://docs.python.org/2/library/datetime.html
(under strptime())
See time.strptime() for important thread safety information.
Having just encountered this unusual and undocumented thread safety problem using 2.7.6, I'm wondering if there are other similar lurking thread safety issues that I might only find when the race conditions are just right and my program stops working.
|
msg263985 - (view) |
Author: SilentGhost (SilentGhost) * |
Date: 2016-04-22 08:44 |
Lisa, please be careful with nosy list.
|
msg263988 - (view) |
Author: Eryk Sun (eryksun) * |
Date: 2016-04-22 09:07 |
SilentGhost, msg263977 is spam copied from msg206393 to try to fool people into clicking on the link. I've marked all of these messages from editor-buzzfeed as spam.
|
msg353869 - (view) |
Author: Paul Ganssle (p-ganssle) * |
Date: 2019-10-03 18:11 |
From what I can tell, this is a Python 2.7-only bug, and it's not a security issue, so I think we can close the issue as either "wontfix" (because we won't fix it in Python 2) or "fixed" (because it is already fixed in Python 3), depending on your perspective.
|
msg357579 - (view) |
Author: Brett Cannon (brett.cannon) * |
Date: 2019-11-27 18:44 |
As per Paul's suggestion, closing as "won't fix" as this only pertains to Python 2.7 and it will not be changing.
|
|
Date |
User |
Action |
Args |
2022-04-11 14:56:57 | admin | set | github: 52228 |
2019-11-27 18:44:21 | brett.cannon | set | status: open -> closed resolution: wont fix messages:
+ msg357579
stage: needs patch -> resolved |
2019-10-03 18:11:15 | p-ganssle | set | nosy:
+ p-ganssle messages:
+ msg353869
|
2016-04-22 09:13:29 | martin.panter | set | messages:
- msg263977 |
2016-04-22 09:07:16 | eryksun | set | nosy:
+ eryksun messages:
+ msg263988
|
2016-04-22 08:44:52 | SilentGhost | set | nosy:
+ Romuald, William.McBrine, ruseel, r.david.murray, matrixise, kzsolt, cptnwillard, fredwheeler, ccorbacho, pitrou, belopolsky, epu, amaury.forgeotdarc, brett.cannon, ced, davidfraser, eric.smith, dpalms2011, mark.dickinson, SilentGhost, flox messages:
+ msg263985
|
2016-04-22 07:46:46 | editor-buzzfeed | set | nosy:
+ editor-buzzfeed, - brett.cannon, amaury.forgeotdarc, mark.dickinson, davidfraser, belopolsky, pitrou, eric.smith, ruseel, cptnwillard, ced, r.david.murray, flox, ccorbacho, kzsolt, matrixise, William.McBrine, epu, dpalms2011, Romuald, fredwheeler messages:
+ msg263977
|
2014-06-20 15:03:04 | fredwheeler | set | nosy:
+ fredwheeler messages:
+ msg221094
|
2014-04-10 19:34:14 | pitrou | set | messages:
+ msg215900 |
2014-04-10 17:35:51 | mark.dickinson | set | nosy:
+ mark.dickinson
|
2014-04-10 16:35:52 | epu | set | nosy:
+ epu
|
2014-03-18 20:26:27 | Romuald | set | files:
+ issue7980-fix.patch keywords:
+ patch messages:
+ msg214014
|
2014-03-18 20:16:13 | matrixise | set | nosy:
+ matrixise messages:
+ msg214013
|
2014-03-18 14:00:32 | Romuald | set | nosy:
+ Romuald
|
2013-12-17 02:11:42 | r.david.murray | set | messages:
+ msg206393 versions:
- Python 2.6, Python 3.1, Python 3.2 |
2013-12-16 18:25:18 | dpalms2011 | set | nosy:
+ dpalms2011 messages:
+ msg206340
|
2013-03-13 03:53:02 | William.McBrine | set | nosy:
+ William.McBrine messages:
+ msg184067
|
2012-05-09 11:12:32 | pitrou | set | nosy:
+ pitrou messages:
+ msg160270
|
2012-04-19 09:07:31 | ced | set | nosy:
+ ced
|
2012-01-19 07:23:09 | flox | set | nosy:
+ flox
|
2011-11-05 20:59:29 | kzsolt | set | nosy:
+ kzsolt messages:
+ msg147110
|
2011-02-04 08:08:12 | ccorbacho | set | nosy:
+ ccorbacho messages:
+ msg127872
|
2011-02-04 00:27:14 | amaury.forgeotdarc | link | issue11108 superseder |
2010-10-13 15:26:35 | belopolsky | set | keywords:
- patch
messages:
+ msg118530 |
2010-10-10 16:42:42 | ruseel | set | messages:
+ msg118338 |
2010-10-05 17:16:06 | belopolsky | set | messages:
+ msg118022 |
2010-10-05 17:10:28 | belopolsky | set | messages:
+ msg118021 |
2010-10-05 15:09:42 | pitrou | set | nosy:
+ belopolsky
stage: test needed -> needs patch |
2010-10-05 12:16:20 | ruseel | set | files:
+ issue7980-test.patch keywords:
+ patch messages:
+ msg118005
|
2010-09-28 12:33:20 | ruseel | set | nosy:
+ ruseel
|
2010-07-21 17:55:35 | davidfraser | set | nosy:
+ davidfraser
|
2010-02-22 18:37:13 | r.david.murray | set | versions:
+ Python 3.1, Python 2.7, Python 3.2 |
2010-02-22 18:36:46 | r.david.murray | set | priority: normal
messages:
+ msg99807 stage: test needed |
2010-02-22 18:31:36 | eric.smith | set | messages:
+ msg99805 |
2010-02-22 18:29:29 | r.david.murray | set | messages:
+ msg99803 |
2010-02-22 16:09:45 | r.david.murray | set | nosy:
+ r.david.murray messages:
+ msg99768
|
2010-02-22 15:49:13 | amaury.forgeotdarc | set | messages:
+ msg99754 |
2010-02-22 15:34:21 | brett.cannon | set | nosy:
+ brett.cannon messages:
+ msg99749
|
2010-02-22 12:24:21 | eric.smith | set | messages:
+ msg99726 |
2010-02-22 12:19:02 | amaury.forgeotdarc | set | nosy:
+ amaury.forgeotdarc messages:
+ msg99725
|
2010-02-22 12:05:22 | eric.smith | set | nosy:
+ eric.smith messages:
+ msg99724
|
2010-02-22 10:46:36 | cptnwillard | create | |