Mercurial > cpython-lru_cache-weakref
annotate Lib/test/win_console_handler.py @ 87690:66c1c9f32567 default tip
Add use_weakref option to functools.lru_cache
The use_weakref option makes lru_cache create weak references to the function
arguments when creating the cache key, which prevents them from staying in the
memory forever even after all other references to them are gone.
This is a proof of concept for http://bugs.python.org/issue19859
| author | Radomir Dopieralski <devel@sheep.art.pl> |
|---|---|
| date | Tue, 03 Dec 2013 16:02:48 +0100 |
| parents | 169bf01bb507 |
| children |
| rev | line source |
|---|---|
|
60556
a2f5b3b19eb2
Port #1220212 (os.kill for Win32) to py3k.
Brian Curtin <brian.curtin@gmail.com>
parents:
diff
changeset
|
1 """Script used to test os.kill on Windows, for issue #1220212 |
|
a2f5b3b19eb2
Port #1220212 (os.kill for Win32) to py3k.
Brian Curtin <brian.curtin@gmail.com>
parents:
diff
changeset
|
2 |
|
a2f5b3b19eb2
Port #1220212 (os.kill for Win32) to py3k.
Brian Curtin <brian.curtin@gmail.com>
parents:
diff
changeset
|
3 This script is started as a subprocess in test_os and is used to test the |
|
a2f5b3b19eb2
Port #1220212 (os.kill for Win32) to py3k.
Brian Curtin <brian.curtin@gmail.com>
parents:
diff
changeset
|
4 CTRL_C_EVENT and CTRL_BREAK_EVENT signals, which requires a custom handler |
|
a2f5b3b19eb2
Port #1220212 (os.kill for Win32) to py3k.
Brian Curtin <brian.curtin@gmail.com>
parents:
diff
changeset
|
5 to be written into the kill target. |
|
a2f5b3b19eb2
Port #1220212 (os.kill for Win32) to py3k.
Brian Curtin <brian.curtin@gmail.com>
parents:
diff
changeset
|
6 |
|
a2f5b3b19eb2
Port #1220212 (os.kill for Win32) to py3k.
Brian Curtin <brian.curtin@gmail.com>
parents:
diff
changeset
|
7 See http://msdn.microsoft.com/en-us/library/ms685049%28v=VS.85%29.aspx for a |
|
a2f5b3b19eb2
Port #1220212 (os.kill for Win32) to py3k.
Brian Curtin <brian.curtin@gmail.com>
parents:
diff
changeset
|
8 similar example in C. |
|
a2f5b3b19eb2
Port #1220212 (os.kill for Win32) to py3k.
Brian Curtin <brian.curtin@gmail.com>
parents:
diff
changeset
|
9 """ |
|
a2f5b3b19eb2
Port #1220212 (os.kill for Win32) to py3k.
Brian Curtin <brian.curtin@gmail.com>
parents:
diff
changeset
|
10 |
|
65016
25e8b7827c7d
Fix #9978. WINFUNCTYPE is from ctypes, not from ctypes.wintypes.
Brian Curtin <brian.curtin@gmail.com>
parents:
60556
diff
changeset
|
11 from ctypes import wintypes, WINFUNCTYPE |
|
60556
a2f5b3b19eb2
Port #1220212 (os.kill for Win32) to py3k.
Brian Curtin <brian.curtin@gmail.com>
parents:
diff
changeset
|
12 import signal |
|
a2f5b3b19eb2
Port #1220212 (os.kill for Win32) to py3k.
Brian Curtin <brian.curtin@gmail.com>
parents:
diff
changeset
|
13 import ctypes |
|
65173
a14e074fa42f
Issue #9978: Wait until subprocess completes initialization. (Win32KillTests in test_os)
Hirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp>
parents:
65016
diff
changeset
|
14 import mmap |
|
a14e074fa42f
Issue #9978: Wait until subprocess completes initialization. (Win32KillTests in test_os)
Hirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp>
parents:
65016
diff
changeset
|
15 import sys |
|
60556
a2f5b3b19eb2
Port #1220212 (os.kill for Win32) to py3k.
Brian Curtin <brian.curtin@gmail.com>
parents:
diff
changeset
|
16 |
|
a2f5b3b19eb2
Port #1220212 (os.kill for Win32) to py3k.
Brian Curtin <brian.curtin@gmail.com>
parents:
diff
changeset
|
17 # Function prototype for the handler function. Returns BOOL, takes a DWORD. |
|
65016
25e8b7827c7d
Fix #9978. WINFUNCTYPE is from ctypes, not from ctypes.wintypes.
Brian Curtin <brian.curtin@gmail.com>
parents:
60556
diff
changeset
|
18 HandlerRoutine = WINFUNCTYPE(wintypes.BOOL, wintypes.DWORD) |
|
60556
a2f5b3b19eb2
Port #1220212 (os.kill for Win32) to py3k.
Brian Curtin <brian.curtin@gmail.com>
parents:
diff
changeset
|
19 |
|
a2f5b3b19eb2
Port #1220212 (os.kill for Win32) to py3k.
Brian Curtin <brian.curtin@gmail.com>
parents:
diff
changeset
|
20 def _ctrl_handler(sig): |
|
a2f5b3b19eb2
Port #1220212 (os.kill for Win32) to py3k.
Brian Curtin <brian.curtin@gmail.com>
parents:
diff
changeset
|
21 """Handle a sig event and return 0 to terminate the process""" |
|
a2f5b3b19eb2
Port #1220212 (os.kill for Win32) to py3k.
Brian Curtin <brian.curtin@gmail.com>
parents:
diff
changeset
|
22 if sig == signal.CTRL_C_EVENT: |
|
a2f5b3b19eb2
Port #1220212 (os.kill for Win32) to py3k.
Brian Curtin <brian.curtin@gmail.com>
parents:
diff
changeset
|
23 pass |
|
a2f5b3b19eb2
Port #1220212 (os.kill for Win32) to py3k.
Brian Curtin <brian.curtin@gmail.com>
parents:
diff
changeset
|
24 elif sig == signal.CTRL_BREAK_EVENT: |
|
a2f5b3b19eb2
Port #1220212 (os.kill for Win32) to py3k.
Brian Curtin <brian.curtin@gmail.com>
parents:
diff
changeset
|
25 pass |
|
a2f5b3b19eb2
Port #1220212 (os.kill for Win32) to py3k.
Brian Curtin <brian.curtin@gmail.com>
parents:
diff
changeset
|
26 else: |
|
a2f5b3b19eb2
Port #1220212 (os.kill for Win32) to py3k.
Brian Curtin <brian.curtin@gmail.com>
parents:
diff
changeset
|
27 print("UNKNOWN EVENT") |
|
a2f5b3b19eb2
Port #1220212 (os.kill for Win32) to py3k.
Brian Curtin <brian.curtin@gmail.com>
parents:
diff
changeset
|
28 return 0 |
|
a2f5b3b19eb2
Port #1220212 (os.kill for Win32) to py3k.
Brian Curtin <brian.curtin@gmail.com>
parents:
diff
changeset
|
29 |
|
a2f5b3b19eb2
Port #1220212 (os.kill for Win32) to py3k.
Brian Curtin <brian.curtin@gmail.com>
parents:
diff
changeset
|
30 ctrl_handler = HandlerRoutine(_ctrl_handler) |
|
a2f5b3b19eb2
Port #1220212 (os.kill for Win32) to py3k.
Brian Curtin <brian.curtin@gmail.com>
parents:
diff
changeset
|
31 |
|
a2f5b3b19eb2
Port #1220212 (os.kill for Win32) to py3k.
Brian Curtin <brian.curtin@gmail.com>
parents:
diff
changeset
|
32 |
|
a2f5b3b19eb2
Port #1220212 (os.kill for Win32) to py3k.
Brian Curtin <brian.curtin@gmail.com>
parents:
diff
changeset
|
33 SetConsoleCtrlHandler = ctypes.windll.kernel32.SetConsoleCtrlHandler |
|
a2f5b3b19eb2
Port #1220212 (os.kill for Win32) to py3k.
Brian Curtin <brian.curtin@gmail.com>
parents:
diff
changeset
|
34 SetConsoleCtrlHandler.argtypes = (HandlerRoutine, wintypes.BOOL) |
|
a2f5b3b19eb2
Port #1220212 (os.kill for Win32) to py3k.
Brian Curtin <brian.curtin@gmail.com>
parents:
diff
changeset
|
35 SetConsoleCtrlHandler.restype = wintypes.BOOL |
|
a2f5b3b19eb2
Port #1220212 (os.kill for Win32) to py3k.
Brian Curtin <brian.curtin@gmail.com>
parents:
diff
changeset
|
36 |
|
a2f5b3b19eb2
Port #1220212 (os.kill for Win32) to py3k.
Brian Curtin <brian.curtin@gmail.com>
parents:
diff
changeset
|
37 if __name__ == "__main__": |
|
a2f5b3b19eb2
Port #1220212 (os.kill for Win32) to py3k.
Brian Curtin <brian.curtin@gmail.com>
parents:
diff
changeset
|
38 # Add our console control handling function with value 1 |
|
a2f5b3b19eb2
Port #1220212 (os.kill for Win32) to py3k.
Brian Curtin <brian.curtin@gmail.com>
parents:
diff
changeset
|
39 if not SetConsoleCtrlHandler(ctrl_handler, 1): |
|
a2f5b3b19eb2
Port #1220212 (os.kill for Win32) to py3k.
Brian Curtin <brian.curtin@gmail.com>
parents:
diff
changeset
|
40 print("Unable to add SetConsoleCtrlHandler") |
|
a2f5b3b19eb2
Port #1220212 (os.kill for Win32) to py3k.
Brian Curtin <brian.curtin@gmail.com>
parents:
diff
changeset
|
41 exit(-1) |
|
a2f5b3b19eb2
Port #1220212 (os.kill for Win32) to py3k.
Brian Curtin <brian.curtin@gmail.com>
parents:
diff
changeset
|
42 |
|
66803
169bf01bb507
Fixed typo in comment.
Hirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp>
parents:
65173
diff
changeset
|
43 # Awake main process |
|
65173
a14e074fa42f
Issue #9978: Wait until subprocess completes initialization. (Win32KillTests in test_os)
Hirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp>
parents:
65016
diff
changeset
|
44 m = mmap.mmap(-1, 1, sys.argv[1]) |
|
a14e074fa42f
Issue #9978: Wait until subprocess completes initialization. (Win32KillTests in test_os)
Hirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp>
parents:
65016
diff
changeset
|
45 m[0] = 1 |
|
a14e074fa42f
Issue #9978: Wait until subprocess completes initialization. (Win32KillTests in test_os)
Hirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp>
parents:
65016
diff
changeset
|
46 |
|
60556
a2f5b3b19eb2
Port #1220212 (os.kill for Win32) to py3k.
Brian Curtin <brian.curtin@gmail.com>
parents:
diff
changeset
|
47 # Do nothing but wait for the signal |
|
a2f5b3b19eb2
Port #1220212 (os.kill for Win32) to py3k.
Brian Curtin <brian.curtin@gmail.com>
parents:
diff
changeset
|
48 while True: |
|
a2f5b3b19eb2
Port #1220212 (os.kill for Win32) to py3k.
Brian Curtin <brian.curtin@gmail.com>
parents:
diff
changeset
|
49 pass |
