Issue21137
Created on 2014-04-03 01:19 by rhettinger, last changed 2014-05-26 05:21 by berker.peksag. This issue is now closed.
| Files | ||||
|---|---|---|---|---|
| File name | Uploaded | Description | Edit | |
| issue21137.diff | berker.peksag, 2014-04-03 02:14 | review | ||
| issue21137_v2.diff | berker.peksag, 2014-04-30 18:32 | review | ||
| issue21137_v3.diff | berker.peksag, 2014-05-23 03:39 | review | ||
| Messages (10) | |||
|---|---|---|---|
| msg215413 - (view) | Author: Raymond Hettinger (rhettinger) * | Date: 2014-04-03 01:19 | |
It is really nice to have the open/closed status in the __repr__ of file objects: <open file 'data.txt', mode 'r' at 0x102c8ec90> <closed file 'data.txt', mode 'r' at 0x102c8ec90> I would like to have the same for locks: <unlocked thread.lock object at 0x1002b1330> <locked thread.lock object at 0x1002b1330> This would be nice in logs and tracebacks for example. |
|||
| msg215416 - (view) | Author: Berker Peksag (berker.peksag) * | Date: 2014-04-03 02:14 | |
Here's a patch with a test. Example repr of threading.Lock():
$ ./python -c "import threading; print(threading.Lock())"
<unlocked _thread.lock object>
|
|||
| msg215436 - (view) | Author: Serhiy Storchaka (serhiy.storchaka) * | Date: 2014-04-03 10:12 | |
The repr of threading._RLock contains owner and count, but not lock/unlock status. The repr of locks from _dummy_thread also should contain lock/unlock status. And it would be nice to have the open/closed status in the repr of other synchronization primitives: Condition, Semaphore, etc. As for tests, I think assertRegex() will produce more useful error report. |
|||
| msg215437 - (view) | Author: Serhiy Storchaka (serhiy.storchaka) * | Date: 2014-04-03 10:14 | |
And of course we should keep "at 0x..." part, because it is the way to distinguish different lock objects. |
|||
| msg217440 - (view) | Author: Antoine Pitrou (pitrou) * | Date: 2014-04-28 23:01 | |
> The repr of threading._RLock contains owner and count, but not > lock/unlock status. The repr of locks from _dummy_thread also should > contain lock/unlock status. And it would be nice to have the > open/closed status in the repr of other synchronization primitives: > Condition, Semaphore, etc. I think it's ok to stay focussed and restrict this issue to threading.Lock (and perhaps RLock). Berker, do you want to provide an updated patch? |
|||
| msg217637 - (view) | Author: Berker Peksag (berker.peksag) * | Date: 2014-04-30 18:32 | |
Here's an updated patch. Thanks for the reviews.
> And of course we should keep "at 0x..." part, because it is the way to distinguish different lock objects.
Done.
$ ./python -c "import threading; l = threading.Lock(); print(l)"
<unlocked _thread.lock object at 0x7f0a19e7b1f8>
> The repr of threading._RLock contains owner and count, but not lock/unlock status.
Done.
$ ./python -c "import threading; rl = threading.RLock(); rl.acquire(); print(rl)"
<locked _thread.RLock object owner=139769600231168 count=1>
> The repr of locks from _dummy_thread also should contain lock/unlock status.
Done.
$ ./python -c "import dummy_threading as threading; l = threading.Lock(); print(l)"
<unlocked _dummy_thread.LockType object at 0x7fb334245400>
$ ./python -c "import dummy_threading as threading; l = threading.RLock(); print(l)"
<unlocked threading._RLock object owner=None count=0 at 0x7f524d0138e0>
> As for tests, I think assertRegex() will produce more useful error report.
Done.
|
|||
| msg218940 - (view) | Author: Raymond Hettinger (rhettinger) * | Date: 2014-05-23 03:02 | |
The patch is just about ready to go but needs to address some failing tests: ====================================================================== FAIL: test_locked_repr (test.test_importlib.test_locks.Frozen_ModuleLockAsRLockTests) ---------------------------------------------------------------------- Traceback (most recent call last): File "/Users/raymond/cpython/Lib/test/lock_tests.py", line 91, in test_locked_repr self.assertRegex(repr(lock), "<locked .* object (.*)?at .*>") AssertionError: Regex didn't match: '<locked .* object (.*)?at .*>' not found in "_ModuleLock('some_lock') at 4438138048" ====================================================================== FAIL: test_repr (test.test_importlib.test_locks.Frozen_ModuleLockAsRLockTests) ---------------------------------------------------------------------- Traceback (most recent call last): File "/Users/raymond/cpython/Lib/test/lock_tests.py", line 85, in test_repr self.assertRegex(repr(lock), "<unlocked .* object (.*)?at .*>") AssertionError: Regex didn't match: '<unlocked .* object (.*)?at .*>' not found in "_ModuleLock('some_lock') at 4439151784" ====================================================================== FAIL: test_locked_repr (test.test_importlib.test_locks.Source_ModuleLockAsRLockTests) ---------------------------------------------------------------------- Traceback (most recent call last): File "/Users/raymond/cpython/Lib/test/lock_tests.py", line 91, in test_locked_repr self.assertRegex(repr(lock), "<locked .* object (.*)?at .*>") AssertionError: Regex didn't match: '<locked .* object (.*)?at .*>' not found in "_ModuleLock('some_lock') at 4438192312" ====================================================================== FAIL: test_repr (test.test_importlib.test_locks.Source_ModuleLockAsRLockTests) ---------------------------------------------------------------------- Traceback (most recent call last): File "/Users/raymond/cpython/Lib/test/lock_tests.py", line 85, in test_repr self.assertRegex(repr(lock), "<unlocked .* object (.*)?at .*>") AssertionError: Regex didn't match: '<unlocked .* object (.*)?at .*>' not found in "_ModuleLock('some_lock') at 4438192480" ---------------------------------------------------------------------- Ran 970 tests in 0.549s FAILED (failures=4, skipped=7, expected failures=1) test test_importlib failed 1 test failed: test_importlib |
|||
| msg218942 - (view) | Author: Berker Peksag (berker.peksag) * | Date: 2014-05-23 03:39 | |
Here is a new patch. I've disabled test_repr and test_locked_repr tests in Lib/test/test_importlib/test_locks.py. |
|||
| msg219116 - (view) | Author: Roundup Robot (python-dev) | Date: 2014-05-26 01:22 | |
New changeset 7574f94b1068 by Raymond Hettinger in branch 'default': Issue 21137: Better repr for threading.Lock() http://hg.python.org/cpython/rev/7574f94b1068 |
|||
| msg219117 - (view) | Author: Raymond Hettinger (rhettinger) * | Date: 2014-05-26 01:23 | |
Thanks Berker. |
|||
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2014-05-26 05:21:13 | berker.peksag | set | stage: patch review -> resolved |
| 2014-05-26 01:23:20 | rhettinger | set | status: open -> closed resolution: fixed messages: + msg219117 |
| 2014-05-26 01:22:44 | python-dev | set | nosy:
+ python-dev messages: + msg219116 |
| 2014-05-23 03:39:33 | berker.peksag | set | files:
+ issue21137_v3.diff messages: + msg218942 |
| 2014-05-23 03:02:10 | rhettinger | set | messages: + msg218940 |
| 2014-05-23 02:48:43 | rhettinger | set | assignee: rhettinger |
| 2014-04-30 18:32:10 | berker.peksag | set | files:
+ issue21137_v2.diff messages: + msg217637 |
| 2014-04-28 23:01:56 | pitrou | set | nosy:
+ pitrou messages: + msg217440 |
| 2014-04-03 10:14:50 | serhiy.storchaka | set | messages: + msg215437 |
| 2014-04-03 10:12:37 | serhiy.storchaka | set | nosy:
+ serhiy.storchaka messages:
+ msg215436 |
| 2014-04-03 02:14:28 | berker.peksag | set | files:
+ issue21137.diff nosy:
+ berker.peksag keywords: + patch |
| 2014-04-03 01:19:02 | rhettinger | create | |