Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
cpython
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
cpython
Commits
2067bfdf
Commit
2067bfdf
authored
May 25, 2008
by
Georg Brandl
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Rename thread to _thread and dummy_thread to _dummy_thread. Issue #2875.
parent
3b4b45bf
Changes
55
Hide whitespace changes
Inline
Side-by-side
Showing
55 changed files
with
161 additions
and
146 deletions
+161
-146
Demo/metaclasses/Synch.py
Demo/metaclasses/Synch.py
+1
-1
Demo/pysvr/pysvr.py
Demo/pysvr/pysvr.py
+4
-4
Demo/threads/Coroutine.py
Demo/threads/Coroutine.py
+1
-1
Demo/threads/Generator.py
Demo/threads/Generator.py
+1
-1
Demo/threads/find.py
Demo/threads/find.py
+1
-1
Demo/threads/sync.py
Demo/threads/sync.py
+1
-1
Demo/threads/telnet.py
Demo/threads/telnet.py
+1
-1
Doc/c-api/exceptions.rst
Doc/c-api/exceptions.rst
+1
-1
Doc/c-api/init.rst
Doc/c-api/init.rst
+2
-2
Doc/c-api/typeobj.rst
Doc/c-api/typeobj.rst
+1
-1
Doc/library/_dummy_thread.rst
Doc/library/_dummy_thread.rst
+22
-0
Doc/library/_thread.rst
Doc/library/_thread.rst
+8
-9
Doc/library/dummy_threading.rst
Doc/library/dummy_threading.rst
+6
-7
Doc/library/someos.rst
Doc/library/someos.rst
+2
-2
Doc/library/threading.rst
Doc/library/threading.rst
+4
-5
Include/ceval.h
Include/ceval.h
+1
-1
Lib/_dummy_thread.py
Lib/_dummy_thread.py
+12
-12
Lib/_strptime.py
Lib/_strptime.py
+2
-2
Lib/bsddb/__init__.py
Lib/bsddb/__init__.py
+2
-2
Lib/dummy_threading.py
Lib/dummy_threading.py
+10
-10
Lib/idlelib/run.py
Lib/idlelib/run.py
+1
-1
Lib/logging/__init__.py
Lib/logging/__init__.py
+1
-1
Lib/logging/config.py
Lib/logging/config.py
+1
-1
Lib/mimetools.py
Lib/mimetools.py
+4
-4
Lib/pydoc.py
Lib/pydoc.py
+1
-1
Lib/telnetlib.py
Lib/telnetlib.py
+2
-2
Lib/tempfile.py
Lib/tempfile.py
+2
-2
Lib/test/crashers/multithreaded_close.py
Lib/test/crashers/multithreaded_close.py
+2
-2
Lib/test/fork_wait.py
Lib/test/fork_wait.py
+2
-2
Lib/test/test___all__.py
Lib/test/test___all__.py
+1
-1
Lib/test/test_asynchat.py
Lib/test/test_asynchat.py
+1
-1
Lib/test/test_capi.py
Lib/test/test_capi.py
+4
-4
Lib/test/test_dummy_thread.py
Lib/test/test_dummy_thread.py
+3
-3
Lib/test/test_socket.py
Lib/test/test_socket.py
+2
-1
Lib/test/test_sys.py
Lib/test/test_sys.py
+4
-4
Lib/test/test_thread.py
Lib/test/test_thread.py
+1
-1
Lib/test/test_threaded_import.py
Lib/test/test_threaded_import.py
+1
-1
Lib/test/test_threadedtempfile.py
Lib/test/test_threadedtempfile.py
+1
-1
Lib/test/test_threading.py
Lib/test/test_threading.py
+9
-9
Lib/test/test_threadsignals.py
Lib/test/test_threadsignals.py
+1
-1
Lib/threading.py
Lib/threading.py
+13
-18
Misc/cheatsheet
Misc/cheatsheet
+2
-2
Modules/Setup.config.in
Modules/Setup.config.in
+1
-1
Modules/_threadmodule.c
Modules/_threadmodule.c
+3
-3
PC/VC6/pythoncore.dsp
PC/VC6/pythoncore.dsp
+1
-1
PC/VS7.1/pythoncore.vcproj
PC/VS7.1/pythoncore.vcproj
+1
-1
PC/VS8.0/pythoncore.vcproj
PC/VS8.0/pythoncore.vcproj
+1
-1
PC/config.c
PC/config.c
+2
-2
PC/os2emx/Makefile
PC/os2emx/Makefile
+1
-1
PC/os2emx/config.c
PC/os2emx/config.c
+2
-2
PC/os2emx/python26.def
PC/os2emx/python26.def
+2
-2
PC/os2vacpp/config.c
PC/os2vacpp/config.c
+2
-2
PC/os2vacpp/makefile
PC/os2vacpp/makefile
+1
-1
PC/os2vacpp/makefile.omk
PC/os2vacpp/makefile.omk
+1
-1
PCbuild/pythoncore.vcproj
PCbuild/pythoncore.vcproj
+1
-1
No files found.
Demo/metaclasses/Synch.py
View file @
2067bfdf
...
...
@@ -4,7 +4,7 @@ This metaclass makes it possible to declare synchronized methods.
"""
import
thread
import
_thread
as
thread
# First we need to define a reentrant lock.
# This is generally useful and should probably be in a standard Python
...
...
Demo/pysvr/pysvr.py
View file @
2067bfdf
...
...
@@ -12,7 +12,7 @@ can log in on your machine. Use with caution!
"""
import
sys
,
os
,
string
,
getopt
,
thread
,
socket
,
traceback
import
sys
,
os
,
string
,
getopt
,
_
thread
,
socket
,
traceback
PORT
=
4000
# Default port
...
...
@@ -52,17 +52,17 @@ def main_thread(port):
conn
.
close
()
print
(
"Refusing connection from non-local host"
,
addr
[
0
],
"."
)
continue
thread
.
start_new_thread
(
service_thread
,
(
conn
,
addr
))
_
thread
.
start_new_thread
(
service_thread
,
(
conn
,
addr
))
del
conn
,
addr
def
service_thread
(
conn
,
addr
):
(
caddr
,
cport
)
=
addr
print
(
"Thread %s has connection from %s.
\
n
"
%
(
str
(
thread
.
get_ident
()),
print
(
"Thread %s has connection from %s.
\
n
"
%
(
str
(
_
thread
.
get_ident
()),
caddr
),
end
=
' '
)
stdin
=
conn
.
makefile
(
"r"
)
stdout
=
conn
.
makefile
(
"w"
,
0
)
run_interpreter
(
stdin
,
stdout
)
print
(
"Thread %s is done.
\
n
"
%
str
(
thread
.
get_ident
()),
end
=
' '
)
print
(
"Thread %s is done.
\
n
"
%
str
(
_
thread
.
get_ident
()),
end
=
' '
)
def
run_interpreter
(
stdin
,
stdout
):
globals
=
{}
...
...
Demo/threads/Coroutine.py
View file @
2067bfdf
...
...
@@ -66,7 +66,7 @@
# current implementation consumes a thread for each coroutine that
# may be resumed.
import
thread
import
_thread
as
thread
import
sync
class
_CoEvent
:
...
...
Demo/threads/Generator.py
View file @
2067bfdf
# Generator implementation using threads
import
thread
import
_thread
as
thread
Killed
=
'Generator.Killed'
...
...
Demo/threads/find.py
View file @
2067bfdf
...
...
@@ -20,7 +20,7 @@ import getopt
import
time
import
os
from
stat
import
*
import
thread
import
_thread
as
thread
# Work queue class. Usage:
...
...
Demo/threads/sync.py
View file @
2067bfdf
...
...
@@ -268,7 +268,7 @@
# if there are are no threads waiting to write. (This is a
# weakness of the interface!)
import
thread
import
_thread
as
thread
class
condition
:
def
__init__
(
self
,
lock
=
None
):
...
...
Demo/threads/telnet.py
View file @
2067bfdf
...
...
@@ -15,7 +15,7 @@
import
sys
,
os
,
time
from
socket
import
*
import
thread
import
_thread
as
thread
BUFSIZE
=
8
*
1024
...
...
Doc/c-api/exceptions.rst
View file @
2067bfdf
...
...
@@ -351,7 +351,7 @@ in various ways. There is a separate error indicator for each thread.
be raised. It may be called without holding the interpreter lock.
.. % XXX This was described as obsolete, but is used in
.. % thread.interrupt_main() (used from IDLE), so it's still needed.
.. %
_
thread.interrupt_main() (used from IDLE), so it's still needed.
.. cfunction:: int PySignal_SetWakeupFd(int fd)
...
...
Doc/c-api/init.rst
View file @
2067bfdf
...
...
@@ -539,7 +539,7 @@ supports the creation of additional interpreters (using
This is a no-op when called for a second time. It is safe to call this function
before calling :cfunc:`Py_Initialize`.
.. index:: module: thread
.. index:: module:
_
thread
When only the main thread exists, no lock operations are needed. This is a
common situation (most Python programs do not use threads), and the lock
...
...
@@ -547,7 +547,7 @@ supports the creation of additional interpreters (using
initially. This situation is equivalent to having acquired the lock: when
there is only a single thread, all object accesses are safe. Therefore, when
this function initializes the lock, it also acquires it. Before the Python
:mod:`thread` module creates a new thread, knowing that either it has the lock
:mod:`
_
thread` module creates a new thread, knowing that either it has the lock
or the lock hasn't been created yet, it calls :cfunc:`PyEval_InitThreads`. When
this call returns, it is guaranteed that the lock has been created and that the
calling thread has acquired it.
...
...
Doc/c-api/typeobj.rst
View file @
2067bfdf
...
...
@@ -488,7 +488,7 @@ type objects) *must* have the :attr:`ob_size` field.
reference cycles. A typical implementation of a :attr:`tp_traverse` function
simply calls :cfunc:`Py_VISIT` on each of the instance's members that are Python
objects. For example, this is function :cfunc:`local_traverse` from the
:mod:`thread` extension module::
:mod:`
_
thread` extension module::
static int
local_traverse(localobject *self, visitproc visit, void *arg)
...
...
Doc/library/dummy_thread.rst
→
Doc/library/
_
dummy_thread.rst
View file @
2067bfdf
:mod:`_dummy_thread` --- Drop-in replacement for the :mod:`_thread` module
==========================================================================
:mod:`dummy_thread` --- Drop-in replacement for the :mod:`thread` module
========================================================================
.. module:: _dummy_thread
:synopsis: Drop-in replacement for the _thread module.
.. module:: dummy_thread
:synopsis: Drop-in replacement for the thread module.
This module provides a duplicate interface to the :mod:`thread` module. It is
meant to be imported when the :mod:`thread` module is not provided on a
This module provides a duplicate interface to the :mod:`_thread` module. It is
meant to be imported when the :mod:`_thread` module is not provided on a
platform.
Suggested usage is::
try:
import
thread as
_thread
import _thread
except ImportError:
import dummy_thread as _thread
Be careful to not use this module where deadlock might occur from a thread
being created that blocks waiting for another thread to be created. This often
occurs
with blocking I/O.
Be careful to not use this module where deadlock might occur from a thread
being
created that blocks waiting for another thread to be created. This often occurs
with blocking I/O.
Doc/library/thread.rst
→
Doc/library/
_
thread.rst
View file @
2067bfdf
:mod:`_thread` --- Low-level threading API
==========================================
:mod:`thread` --- Multiple threads of control
=============================================
.. module:: thread
:synopsis: Create multiple threads of control within one interpreter.
.. module:: _thread
:synopsis: Low-level threading API.
.. index::
...
...
@@ -25,8 +24,8 @@ threading API built on top of this module.
The module is optional. It is supported on Windows, Linux, SGI IRIX, Solaris
2.x, as well as on systems that have a POSIX thread (a.k.a. "pthread")
implementation. For systems lacking the :mod:`thread` module, the
:mod:`dummy_thread` module is available. It duplicates this module's interface
implementation. For systems lacking the :mod:`
_
thread` module, the
:mod:`
_
dummy_thread` module is available. It duplicates this module's interface
and can be used as a drop-in replacement.
It defines the following constant and functions:
...
...
@@ -132,9 +131,9 @@ Lock objects have the following methods:
In addition to these methods, lock objects can also be used via the
:keyword:`with` statement, e.g.::
import thread
import
_
thread
a_lock = thread.allocate_lock()
a_lock =
_
thread.allocate_lock()
with a_lock:
print("a_lock is locked while this executes")
...
...
Doc/library/dummy_threading.rst
View file @
2067bfdf
:mod:`dummy_threading` --- Drop-in replacement for the :mod:`threading` module
==============================================================================
...
...
@@ -7,17 +6,17 @@
This module provides a duplicate interface to the :mod:`threading` module. It
is meant to be imported when the :mod:`thread` module is not provided on a
is meant to be imported when the :mod:`
_
thread` module is not provided on a
platform.
Suggested usage is::
try:
import threading
as _threading
import threading
except ImportError:
import dummy_threading
as _threading
import dummy_threading
Be careful to not use this module where deadlock might occur from a thread
being created that blocks waiting for another thread to be created. This often
occurs
with blocking I/O.
Be careful to not use this module where deadlock might occur from a thread
being
created that blocks waiting for another thread to be created. This often occurs
with blocking I/O.
Doc/library/someos.rst
View file @
2067bfdf
...
...
@@ -14,10 +14,10 @@ some other systems as well (e.g. Windows or NT). Here's an overview:
.. toctree::
select.rst
thread.rst
threading.rst
dummy_thread.rst
dummy_threading.rst
_thread.rst
_dummy_thread.rst
mmap.rst
readline.rst
rlcompleter.rst
Doc/library/threading.rst
View file @
2067bfdf
...
...
@@ -6,12 +6,11 @@
:synopsis: Higher-level threading interface.
This module constructs higher-level threading interfaces on top of the lower
level :mod:`thread` module.
See also the :mod:`queue` module.
This module constructs higher-level threading interfaces on top of the lower
level :mod:`_thread` module. See also the :mod:`queue` module.
The :mod:`dummy_threading` module is provided for situations where
:mod:`threading` cannot be used because :mod:`thread` is missing.
:mod:`threading` cannot be used because :mod:`
_
thread` is missing.
This module defines the following functions and objects:
...
...
@@ -170,7 +169,7 @@ Lock Objects
A primitive lock is a synchronization primitive that is not owned by a
particular thread when locked. In Python, it is currently the lowest level
synchronization primitive available, implemented directly by the :mod:`thread`
synchronization primitive available, implemented directly by the :mod:`
_
thread`
extension module.
A primitive lock is in one of two states, "locked" or "unlocked". It is created
...
...
Include/ceval.h
View file @
2067bfdf
...
...
@@ -120,7 +120,7 @@ PyAPI_DATA(int) _Py_CheckInterval;
Py_END_ALLOW_THREADS!!!
The function PyEval_InitThreads() should be called only from
init
thread() in "
threadmodule.c".
init
_thread() in "_
threadmodule.c".
Note that not yet all candidates have been converted to use this
mechanism!
...
...
Lib/dummy_thread.py
→
Lib/
_
dummy_thread.py
View file @
2067bfdf
...
...
@@ -6,9 +6,9 @@ not need to be rewritten for when the thread module is not present.
Suggested usage is::
try:
import thread
import
_
thread
except ImportError:
import
dummy_thread as
thread
import
_dummy_thread as _
thread
"""
# Exports only things specified by thread documentation;
...
...
@@ -20,17 +20,17 @@ import traceback as _traceback
import
warnings
class
error
(
Exception
):
"""Dummy implementation of thread.error."""
"""Dummy implementation of
_
thread.error."""
def
__init__
(
self
,
*
args
):
self
.
args
=
args
def
start_new_thread
(
function
,
args
,
kwargs
=
{}):
"""Dummy implementation of thread.start_new_thread().
"""Dummy implementation of
_
thread.start_new_thread().
Compatibility is maintained by making sure that ``args`` is a
tuple and ``kwargs`` is a dictionary. If an exception is raised
and it is SystemExit (which can be done by thread.exit()) it is
and it is SystemExit (which can be done by
_
thread.exit()) it is
caught and nothing is done; all other exceptions are printed out
by using traceback.print_exc().
...
...
@@ -57,34 +57,34 @@ def start_new_thread(function, args, kwargs={}):
raise
KeyboardInterrupt
def
exit
():
"""Dummy implementation of thread.exit()."""
"""Dummy implementation of
_
thread.exit()."""
raise
SystemExit
def
get_ident
():
"""Dummy implementation of thread.get_ident().
"""Dummy implementation of
_
thread.get_ident().
Since this module should only be used when threadmodule is not
Since this module should only be used when
_
threadmodule is not
available, it is safe to assume that the current process is the
only thread. Thus a constant can be safely returned.
"""
return
-
1
def
allocate_lock
():
"""Dummy implementation of thread.allocate_lock()."""
"""Dummy implementation of
_
thread.allocate_lock()."""
return
LockType
()
def
stack_size
(
size
=
None
):
"""Dummy implementation of thread.stack_size()."""
"""Dummy implementation of
_
thread.stack_size()."""
if
size
is
not
None
:
raise
error
(
"setting thread stack size not supported"
)
return
0
class
LockType
(
object
):
"""Class implementing dummy implementation of thread.LockType.
"""Class implementing dummy implementation of
_
thread.LockType.
Compatibility is maintained by maintaining self.locked_status
which is a boolean that stores the state of the lock. Pickling of
the lock, though, should not be done since if the thread module is
the lock, though, should not be done since if the
_
thread module is
then used with an unpickled ``lock()`` from here problems could
occur from this class not having atomic methods.
...
...
Lib/_strptime.py
View file @
2067bfdf
...
...
@@ -18,9 +18,9 @@ from re import IGNORECASE
from
re
import
escape
as
re_escape
from
datetime
import
date
as
datetime_date
try
:
from
thread
import
allocate_lock
as
_thread_allocate_lock
from
_
thread
import
allocate_lock
as
_thread_allocate_lock
except
:
from
dummy_thread
import
allocate_lock
as
_thread_allocate_lock
from
_
dummy_thread
import
allocate_lock
as
_thread_allocate_lock
__all__
=
[]
...
...
Lib/bsddb/__init__.py
View file @
2067bfdf
...
...
@@ -526,8 +526,8 @@ def _checkflag(flag, file):
# BerkeleyDB was too.
try
:
import
thread
del
thread
import
_
thread
del
_
thread
if
db
.
version
()
<
(
3
,
3
,
0
):
db
.
DB_THREAD
=
0
except
ImportError
:
...
...
Lib/dummy_threading.py
View file @
2067bfdf
...
...
@@ -3,12 +3,12 @@
The module ``_dummy_threading`` is added to ``sys.modules`` in order
to not have ``threading`` considered imported. Had ``threading`` been
directly imported it would have made all subsequent imports succeed
regardless of whether ``thread`` was available which is not desired.
regardless of whether ``
_
thread`` was available which is not desired.
"""
from
sys
import
modules
as
sys_modules
import
dummy_thread
import
_
dummy_thread
# Declaring now so as to not have to nest ``try``s to get proper clean-up.
holding_thread
=
False
...
...
@@ -16,15 +16,15 @@ holding_threading = False
holding__threading_local
=
False
try
:
# Could have checked if ``thread`` was not in sys.modules and gone
# Could have checked if ``
_
thread`` was not in sys.modules and gone
# a different route, but decided to mirror technique used with
# ``threading`` below.
if
'thread'
in
sys_modules
:
held_thread
=
sys_modules
[
'thread'
]
if
'
_
thread'
in
sys_modules
:
held_thread
=
sys_modules
[
'
_
thread'
]
holding_thread
=
True
# Must have some module named ``thread`` that implements its API
# Must have some module named ``
_
thread`` that implements its API
# in order to initially import ``threading``.
sys_modules
[
'
thread'
]
=
sys_modules
[
'
dummy_thread'
]
sys_modules
[
'
_thread'
]
=
sys_modules
[
'_
dummy_thread'
]
if
'threading'
in
sys_modules
:
# If ``threading`` is already imported, might as well prevent
...
...
@@ -68,11 +68,11 @@ finally:
# Put back ``thread`` if we overwrote, else del the entry we made
if
holding_thread
:
sys_modules
[
'thread'
]
=
held_thread
sys_modules
[
'
_
thread'
]
=
held_thread
del
held_thread
else
:
del
sys_modules
[
'thread'
]
del
sys_modules
[
'
_
thread'
]
del
holding_thread
del
dummy_thread
del
_
dummy_thread
del
sys_modules
Lib/idlelib/run.py
View file @
2067bfdf
...
...
@@ -3,7 +3,7 @@ import linecache
import
time
import
socket
import
traceback
import
thread
import
_thread
as
thread
import
threading
import
queue
...
...
Lib/logging/__init__.py
View file @
2067bfdf
...
...
@@ -35,7 +35,7 @@ except ImportError:
codecs
=
None
try
:
import
thread
import
_thread
as
thread
import
threading
except
ImportError
:
thread
=
None
...
...
Lib/logging/config.py
View file @
2067bfdf
...
...
@@ -27,7 +27,7 @@ To use, simply 'import logging' and log away!
import
sys
,
logging
,
logging
.
handlers
,
socket
,
struct
,
os
,
traceback
try
:
import
thread
import
_thread
as
thread
import
threading
except
ImportError
:
thread
=
None
...
...
Lib/mimetools.py
View file @
2067bfdf
...
...
@@ -96,11 +96,11 @@ class Message(rfc822.Message):
# -----------------
try
:
import
thread
import
_
thread
except
ImportError
:
import
dummy_thread
as
thread
_counter_lock
=
thread
.
allocate_lock
()
del
thread
import
_dummy_thread
as
_
thread
_counter_lock
=
_
thread
.
allocate_lock
()
del
_
thread
_counter
=
0
def
_get_next_counter
():
...
...
Lib/pydoc.py
View file @
2067bfdf
...
...
@@ -347,7 +347,7 @@ class Doc:
if
(
isinstance
(
object
,
type
(
os
))
and
(
object
.
__name__
in
(
'errno'
,
'exceptions'
,
'gc'
,
'imp'
,
'marshal'
,
'posix'
,
'signal'
,
'sys'
,
'thread'
,
'zipimport'
)
or
'
_
thread'
,
'zipimport'
)
or
(
file
.
startswith
(
basedir
)
and
not
file
.
startswith
(
os
.
path
.
join
(
basedir
,
'site-packages'
))))):
if
docloc
.
startswith
(
"http://"
):
...
...
Lib/telnetlib.py
View file @
2067bfdf
...
...
@@ -548,8 +548,8 @@ class Telnet:
def
mt_interact
(
self
):
"""Multithreaded version of interact()."""
import
thread
thread
.
start_new_thread
(
self
.
listener
,
())
import
_
thread
_
thread
.
start_new_thread
(
self
.
listener
,
())
while
1
:
line
=
sys
.
stdin
.
readline
()
if
not
line
:
...
...
Lib/tempfile.py
View file @
2067bfdf
...
...
@@ -52,9 +52,9 @@ else:
try
:
import
thread
as
_thread
import
_thread
except
ImportError
:
import
dummy_thread
as
_thread
import
_
dummy_thread
as
_thread
_allocate_lock
=
_thread
.
allocate_lock
_text_openflags
=
_os
.
O_RDWR
|
_os
.
O_CREAT
|
_os
.
O_EXCL
...
...
Lib/test/crashers/multithreaded_close.py
View file @
2067bfdf
...
...
@@ -6,9 +6,9 @@
# http://bugs.python.org/issue595601
# http://bugs.python.org/issue815646
import
thread
import
_
thread
while
1
:
f
=
open
(
"multithreaded_close.tmp"
,
"w"
)
thread
.
start_new_thread
(
f
.
close
,
())
_
thread
.
start_new_thread
(
f
.
close
,
())
f
.
close
()
Lib/test/fork_wait.py
View file @
2067bfdf
...
...
@@ -9,7 +9,7 @@ On some systems (e.g. Solaris without posix threads) we find that all
active threads survive in the child after a fork(); this is an error.
"""
import
os
,
sys
,
time
,
thread
,
unittest
import
os
,
sys
,
time
,
_
thread
,
unittest
LONGSLEEP
=
2
SHORTSLEEP
=
0.5
...
...
@@ -43,7 +43,7 @@ class ForkWait(unittest.TestCase):
def
test_wait
(
self
):
for
i
in
range
(
NUM_THREADS
):
thread
.
start_new
(
self
.
f
,
(
i
,))
_
thread
.
start_new
(
self
.
f
,
(
i
,))
time
.
sleep
(
LONGSLEEP
)
...
...
Lib/test/test___all__.py
View file @
2067bfdf
...
...
@@ -63,7 +63,7 @@ class AllTest(unittest.TestCase):
self
.
check_all
(
"dircache"
)
self
.
check_all
(
"dis"
)
self
.
check_all
(
"doctest"
)
self
.
check_all
(
"dummy_thread"
)
self
.
check_all
(
"
_
dummy_thread"
)
self
.
check_all
(
"dummy_threading"
)
self
.
check_all
(
"filecmp"
)
self
.
check_all
(
"fileinput"
)
...
...
Lib/test/test_asynchat.py
View file @
2067bfdf
# test asynchat -- requires threading
import
thread
# If this fails, we can't test this module
import
_thread
as
thread
# If this fails, we can't test this module
import
asyncore
,
asynchat
,
socket
,
threading
,
time
import
unittest
import
sys
...
...
Lib/test/test_capi.py
View file @
2067bfdf
...
...
@@ -22,13 +22,13 @@ def test_main():
idents
=
[]
def
callback
():
idents
.
append
(
thread
.
get_ident
())
idents
.
append
(
_
thread
.
get_ident
())
_testcapi
.
_test_thread_state
(
callback
)
a
=
b
=
callback
time
.
sleep
(
1
)
# Check our main thread is in the list exactly 3 times.
if
idents
.
count
(
thread
.
get_ident
())
!=
3
:
if
idents
.
count
(
_
thread
.
get_ident
())
!=
3
:
raise
support
.
TestFailed
(
"Couldn't find main thread correctly in the list"
)
...
...
@@ -39,11 +39,11 @@ def test_main():
have_thread_state
=
False
if
have_thread_state
:
import
thread
import
_
thread
import
time
TestThreadState
()
import
threading
t
=
threading
.
Thread
(
target
=
TestThreadState
)
t
=
threading
.
Thread
(
target
=
TestThreadState
)
t
.
start
()
t
.
join
()
...
...
Lib/test/test_dummy_thread.py
View file @
2067bfdf
...
...
@@ -5,15 +5,15 @@ to be used, test_main() can be called with the module to use as the thread
implementation as its sole argument.
"""
import
dummy_thread
as
_thread
import
_
dummy_thread
as
_thread
import
time
import
queue
import
random
import
unittest
from
test
import
support
DELAY
=
0
# Set > 0 when testing a module other than dummy_thread, such as
# the 'thread' module.
DELAY
=
0
# Set > 0 when testing a module other than
_
dummy_thread, such as
# the '
_
thread' module.
class
LockTests
(
unittest
.
TestCase
):
"""Test lock objects."""
...
...
Lib/test/test_socket.py
View file @
2067bfdf
...
...
@@ -6,7 +6,8 @@ from test import support
import
errno
import
socket
import
select
import
thread
,
threading
import
_thread
as
thread
import
threading
import
time
import
traceback
import
queue
...
...
Lib/test/test_sys.py
View file @
2067bfdf
...
...
@@ -191,7 +191,7 @@ class SysModuleTest(unittest.TestCase):
def
test_current_frames
(
self
):
have_threads
=
True
try
:
import
thread
import
_
thread
except
ImportError
:
have_threads
=
False
...
...
@@ -202,7 +202,7 @@ class SysModuleTest(unittest.TestCase):
# Test sys._current_frames() in a WITH_THREADS build.
def
current_frames_with_threads
(
self
):
import
threading
,
thread
import
threading
,
_
thread
import
traceback
# Spawn a thread that blocks at a known place. Then the main
...
...
@@ -216,7 +216,7 @@ class SysModuleTest(unittest.TestCase):
g456
()
def
g456
():
thread_info
.
append
(
thread
.
get_ident
())
thread_info
.
append
(
_
thread
.
get_ident
())
entered_g
.
set
()
leave_g
.
wait
()
...
...
@@ -232,7 +232,7 @@ class SysModuleTest(unittest.TestCase):
d
=
sys
.
_current_frames
()
main_id
=
thread
.
get_ident
()
main_id
=
_
thread
.
get_ident
()
self
.
assert_
(
main_id
in
d
)
self
.
assert_
(
thread_id
in
d
)
...
...
Lib/test/test_thread.py
View file @
2067bfdf
...
...
@@ -2,7 +2,7 @@ import os
import
unittest
import
random
from
test
import
support
import
thread
import
_thread
as
thread
import
time
...
...
Lib/test/test_threaded_import.py
View file @
2067bfdf
...
...
@@ -5,7 +5,7 @@
# complains several times about module random having no attribute
# randrange, and then Python hangs.
import
thread
import
_thread
as
thread
from
test.support
import
verbose
,
TestSkipped
,
TestFailed
critical_section
=
thread
.
allocate_lock
()
...
...
Lib/test/test_threadedtempfile.py
View file @
2067bfdf
...
...
@@ -16,7 +16,7 @@ provoking a 2.0 failure under Linux.
NUM_THREADS
=
20
FILES_PER_THREAD
=
50
import
thread
# If this fails, we can't test this module
import
_thread
as
thread
# If this fails, we can't test this module
import
threading
import
tempfile
...
...
Lib/test/test_threading.py
View file @
2067bfdf
...
...
@@ -5,7 +5,7 @@ from test.support import verbose
import
random
import
sys
import
threading
import
thread
import
_
thread
import
time
import
unittest
import
weakref
...
...
@@ -88,7 +88,7 @@ class ThreadTests(unittest.TestCase):
print
(
'with 256kB thread stack size...'
)
try
:
threading
.
stack_size
(
262144
)
except
thread
.
error
:
except
_
thread
.
error
:
if
verbose
:
print
(
'platform does not support changing thread stack size'
)
return
...
...
@@ -101,7 +101,7 @@ class ThreadTests(unittest.TestCase):
print
(
'with 1MB thread stack size...'
)
try
:
threading
.
stack_size
(
0x100000
)
except
thread
.
error
:
except
_
thread
.
error
:
if
verbose
:
print
(
'platform does not support changing thread stack size'
)
return
...
...
@@ -120,7 +120,7 @@ class ThreadTests(unittest.TestCase):
mutex
=
threading
.
Lock
()
mutex
.
acquire
()
tid
=
thread
.
start_new_thread
(
f
,
(
mutex
,))
tid
=
_
thread
.
start_new_thread
(
f
,
(
mutex
,))
# Wait for the thread to finish.
mutex
.
acquire
()
self
.
assert_
(
tid
in
threading
.
_active
)
...
...
@@ -154,7 +154,7 @@ class ThreadTests(unittest.TestCase):
class
Worker
(
threading
.
Thread
):
def
run
(
self
):
self
.
id
=
thread
.
get_ident
()
self
.
id
=
_
thread
.
get_ident
()
self
.
finished
=
False
try
:
...
...
@@ -211,10 +211,10 @@ class ThreadTests(unittest.TestCase):
import
subprocess
rc
=
subprocess
.
call
([
sys
.
executable
,
"-c"
,
"""if 1:
import ctypes, sys, time, thread
import ctypes, sys, time,
_
thread
# This lock is used as a simple event variable.
ready = thread.allocate_lock()
ready =
_
thread.allocate_lock()
ready.acquire()
# Module globals are cleared before __del__ is run
...
...
@@ -231,7 +231,7 @@ class ThreadTests(unittest.TestCase):
ready.release()
time.sleep(100)
thread.start_new_thread(waitingThread, ())
_
thread.start_new_thread(waitingThread, ())
ready.acquire() # Be sure the other thread is waiting.
sys.exit(42)
"""
])
...
...
@@ -357,7 +357,7 @@ class ThreadingExceptionTests(unittest.TestCase):
def
test_main
():
test
.
support
.
run_unittest
(
ThreadTests
,
ThreadingExceptionTests
)
ThreadingExceptionTests
)
if
__name__
==
"__main__"
:
test_main
()
Lib/test/test_threadsignals.py
View file @
2067bfdf
"""PyUnit testing that threads honor our signal semantics"""
import
unittest
import
thread
import
_thread
as
thread
import
signal
import
os
import
sys
...
...
Lib/threading.py
View file @
2067bfdf
"""Thread module emulating a subset of Java's threading model."""
import
sys
as
_sys
try
:
import
thread
except
ImportError
:
del
_sys
.
modules
[
__name__
]
raise
import
_thread
from
time
import
time
as
_time
,
sleep
as
_sleep
from
traceback
import
format_exc
as
_format_exc
...
...
@@ -17,11 +12,11 @@ __all__ = ['activeCount', 'Condition', 'currentThread', 'enumerate', 'Event',
'Lock'
,
'RLock'
,
'Semaphore'
,
'BoundedSemaphore'
,
'Thread'
,
'Timer'
,
'setprofile'
,
'settrace'
,
'local'
,
'stack_size'
]
_start_new_thread
=
thread
.
start_new_thread
_allocate_lock
=
thread
.
allocate_lock
_get_ident
=
thread
.
get_ident
ThreadError
=
thread
.
error
del
thread
_start_new_thread
=
_
thread
.
start_new_thread
_allocate_lock
=
_
thread
.
allocate_lock
_get_ident
=
_
thread
.
get_ident
ThreadError
=
_
thread
.
error
del
_
thread
# Debug support (adapted from ihooks.py).
...
...
@@ -556,18 +551,18 @@ class Thread(_Verbose):
def
_delete
(
self
):
"Remove current thread from the dict of currently running threads."
# Notes about running with dummy_thread:
# Notes about running with
_
dummy_thread:
#
# Must take care to not raise an exception if dummy_thread is being
# Must take care to not raise an exception if
_
dummy_thread is being
# used (and thus this module is being used as an instance of
# dummy_threading). dummy_thread.get_ident() always returns -1 since
# there is only one thread if dummy_thread is being used. Thus
# dummy_threading).
_
dummy_thread.get_ident() always returns -1 since
# there is only one thread if
_
dummy_thread is being used. Thus
# len(_active) is always <= 1 here, and any Thread instance created
# overwrites the (if any) thread currently registered in _active.
#
# An instance of _MainThread is always created by 'threading'. This
# gets overwritten the instant an instance of Thread is created; both
# threads return -1 from dummy_thread.get_ident() and thus have the
# threads return -1 from
_
dummy_thread.get_ident() and thus have the
# same key in the dict. So when the _MainThread instance created by
# 'threading' tries to clean itself up when atexit calls this method
# it gets a KeyError if another Thread instance was created.
...
...
@@ -763,7 +758,7 @@ def enumerate():
_active_limbo_lock
.
release
()
return
active
from
thread
import
stack_size
from
_
thread
import
stack_size
# Create the main thread object,
# and make it available for the interpreter
...
...
@@ -775,7 +770,7 @@ _shutdown = _MainThread()._exitfunc
# module, or from the python fallback
try
:
from
thread
import
_local
as
local
from
_
thread
import
_local
as
local
except
ImportError
:
from
_threading_local
import
local
...
...
Misc/cheatsheet
View file @
2067bfdf
...
...
@@ -1988,8 +1988,8 @@ zipfile Read & write PK zipped files.
re Functions useful for working with regular expressions
string Useful string and characters functions and exceptions
random Mersenne Twister pseudo-random number generator
thread
Low-level primitives for working with process threads
threading idem, new recomm
a
nded interface.
_thread
Low-level primitives for working with process threads
threading idem, new recomm
e
nded interface.
* Unix/Posix *
...
...
Modules/Setup.config.in
View file @
2067bfdf
...
...
@@ -4,7 +4,7 @@
# based on configure-time options.
# Threading
@USE_THREAD_MODULE@
thread
threadmodule.c
@USE_THREAD_MODULE@
_thread _
threadmodule.c
# The signal module
@USE_SIGNAL_MODULE@signal signalmodule.c
...
...
Modules/threadmodule.c
→
Modules/
_
threadmodule.c
View file @
2067bfdf
...
...
@@ -688,7 +688,7 @@ unlock it. A thread attempting to lock a lock that it has already locked\n\
will block until another thread unlocks it. Deadlocks may ensue."
);
PyMODINIT_FUNC
initthread
(
void
)
init
_
thread
(
void
)
{
PyObject
*
m
,
*
d
;
...
...
@@ -699,13 +699,13 @@ initthread(void)
return
;
/* Create the module and add the functions */
m
=
Py_InitModule3
(
"thread"
,
thread_methods
,
thread_doc
);
m
=
Py_InitModule3
(
"
_
thread"
,
thread_methods
,
thread_doc
);
if
(
m
==
NULL
)
return
;
/* Add a symbolic constant */
d
=
PyModule_GetDict
(
m
);
ThreadError
=
PyErr_NewException
(
"thread.error"
,
NULL
,
NULL
);
ThreadError
=
PyErr_NewException
(
"
_
thread.error"
,
NULL
,
NULL
);
PyDict_SetItemString
(
d
,
"error"
,
ThreadError
);
Locktype
.
tp_doc
=
lock_doc
;
Py_INCREF
(
&
Locktype
);
...
...
PC/VC6/pythoncore.dsp
View file @
2067bfdf
...
...
@@ -679,7 +679,7 @@ SOURCE=..\..\Python\thread.c
# End Source File
# Begin Source File
SOURCE=..\..\Modules\threadmodule.c
SOURCE=..\..\Modules\
_
threadmodule.c
# End Source File
# Begin Source File
...
...
PC/VS7.1/pythoncore.vcproj
View file @
2067bfdf
...
...
@@ -768,7 +768,7 @@
RelativePath=
"..\..\Python\thread.c"
>
</File>
<File
RelativePath=
"..\..\Modules\threadmodule.c"
>
RelativePath=
"..\..\Modules\
_
threadmodule.c"
>
</File>
<File
RelativePath=
"..\..\Modules\timemodule.c"
>
...
...
PC/VS8.0/pythoncore.vcproj
View file @
2067bfdf
...
...
@@ -1127,7 +1127,7 @@
>
</File>
<File
RelativePath=
"..\..\Modules\threadmodule.c"
RelativePath=
"..\..\Modules\
_
threadmodule.c"
>
</File>
<File
...
...
PC/config.c
View file @
2067bfdf
...
...
@@ -22,7 +22,7 @@ extern void init_sha1(void);
extern
void
init_sha256
(
void
);
extern
void
init_sha512
(
void
);
extern
void
inittime
(
void
);
extern
void
initthread
(
void
);
extern
void
init
_
thread
(
void
);
extern
void
initcStringIO
(
void
);
#ifdef WIN32
extern
void
initmsvcrt
(
void
);
...
...
@@ -93,7 +93,7 @@ struct _inittab _PyImport_Inittab[] = {
{
"_sha512"
,
init_sha512
},
{
"time"
,
inittime
},
#ifdef WITH_THREAD
{
"
thread"
,
init
thread
},
{
"
_thread"
,
init_
thread
},
#endif
{
"cStringIO"
,
initcStringIO
},
#ifdef WIN32
...
...
PC/os2emx/Makefile
View file @
2067bfdf
...
...
@@ -281,7 +281,7 @@ SRC.MODULES= $(addprefix $(TOP), \
Modules/gcmodule.c
\
Modules/signalmodule.c
\
Modules/posixmodule.c
\
Modules/threadmodule.c
\
Modules/
_
threadmodule.c
\
Modules/arraymodule.c
\
Modules/binascii.c
\
Modules/cmathmodule.c
\
...
...
PC/os2emx/config.c
View file @
2067bfdf
...
...
@@ -39,7 +39,7 @@ PERFORMANCE OF THIS SOFTWARE.
extern
void
initos2
();
extern
void
initsignal
();
#ifdef WITH_THREAD
extern
void
initthread
();
extern
void
init
_
thread
();
#endif
extern
void
init_codecs
();
extern
void
init_csv
();
...
...
@@ -99,7 +99,7 @@ struct _inittab _PyImport_Inittab[] = {
{
"os2"
,
initos2
},
{
"signal"
,
initsignal
},
#ifdef WITH_THREAD
{
"
thread"
,
init
thread
},
{
"
_thread"
,
init_
thread
},
#endif
{
"_codecs"
,
init_codecs
},
{
"_csv"
,
init_csv
},
...
...
PC/os2emx/python26.def
View file @
2067bfdf
...
...
@@ -1194,8 +1194,8 @@ EXPORTS
; From python26_s.lib(posixmodule)
; "initos2"
; From python26_s.lib(threadmodule)
; "initthread"
; From python26_s.lib(
_
threadmodule)
; "init
_
thread"
; From python26_s.lib(arraymodule)
; "initarray"
...
...
PC/os2vacpp/config.c
View file @
2067bfdf
...
...
@@ -33,7 +33,7 @@ extern void initselect(void);
extern
void
init_socket
(
void
);
extern
void
initstruct
(
void
);
extern
void
inittime
(
void
);
extern
void
initthread
(
void
);
extern
void
init
_
thread
(
void
);
extern
void
initcStringIO
(
void
);
extern
void
initpcre
(
void
);
#ifdef WIN32
...
...
@@ -76,7 +76,7 @@ struct _inittab _PyImport_Inittab[] = {
{
"struct"
,
initstruct
},
{
"time"
,
inittime
},
#ifdef WITH_THREAD
{
"
thread"
,
init
thread
},
{
"
_thread"
,
init_
thread
},
#endif
{
"cStringIO"
,
initcStringIO
},
{
"pcre"
,
initpcre
},
...
...
PC/os2vacpp/makefile
View file @
2067bfdf
...
...
@@ -868,7 +868,7 @@ termios.obj: $(PY_INCLUDE)\abstract.h $(PY_INCLUDE)\ceval.h $(PY_INCLUDE)\classo
$(PY_INCLUDE)
\s
liceobject.h $(PY_INCLUDE)
\s
tringobject.h
\
$(PY_INCLUDE)
\s
ysmodule.h $(PY_INCLUDE)
\t
raceback.h $(PY_INCLUDE)
\t
upleobject.h
threadmodule.obj
:
$(PY_INCLUDE)
\a
bstract.h $(PY_INCLUDE)
\c
eval.h
\
_
threadmodule.obj
:
$(PY_INCLUDE)
\a
bstract.h $(PY_INCLUDE)
\c
eval.h
\
$(PY_INCLUDE)
\c
lassobject.h $(PY_INCLUDE)
\c
object.h $(PY_INCLUDE)
\c
omplexobject.h
\
pyconfig.h $(PY_INCLUDE)
\d
ictobject.h $(PY_INCLUDE)
\f
ileobject.h
\
$(PY_INCLUDE)
\f
loatobject.h $(PY_INCLUDE)
\f
uncobject.h $(PY_INCLUDE)
\i
mport.h
\
...
...
PC/os2vacpp/makefile.omk
View file @
2067bfdf
...
...
@@ -630,7 +630,7 @@ termios.obj: abstract.h ceval.h classobject.h cobject.h complexobject.h \
pythonrun.h rangeobject.h sliceobject.h stringobject.h sysmodule.h
\
traceback.h tupleobject.h
threadmodule.obj
:
abstract.h ceval.h classobject.h cobject.h
\
_
threadmodule.obj
:
abstract.h ceval.h classobject.h cobject.h
\
complexobject.h pyconfig.h dictobject.h fileobject.h floatobject.h
\
funcobject.h import.h intobject.h intrcheck.h listobject.h
\
longobject.h methodobject.h modsupport.h moduleobject.h mymalloc.h
\
...
...
PCbuild/pythoncore.vcproj
View file @
2067bfdf
...
...
@@ -1131,7 +1131,7 @@
>
</File>
<File
RelativePath=
"..\Modules\threadmodule.c"
RelativePath=
"..\Modules\
_
threadmodule.c"
>
</File>
<File
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment