mirror of
https://github.com/python/cpython.git
synced 2025-08-04 17:08:35 +00:00
Merged revisions 71874,71882,71890 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk ........ r71874 | jeroen.ruigrok | 2009-04-25 13:59:09 +0200 (za, 25 apr 2009) | 2 lines First attempt to document PyObject_HEAD_INIT and PyVarObject_HEAD_INIT. ........ r71882 | jeroen.ruigrok | 2009-04-25 14:49:10 +0200 (za, 25 apr 2009) | 3 lines Issue #4239: adjust email examples not to use connect() and terminate with quit() and not close(). ........ r71890 | jeroen.ruigrok | 2009-04-25 15:07:40 +0200 (za, 25 apr 2009) | 3 lines Rewrite a sentence to be more in line with the rest of the documentation with regard to person and audience. ........
This commit is contained in:
parent
f4a9f96168
commit
939c178379
6 changed files with 29 additions and 15 deletions
|
@ -489,13 +489,13 @@ thread could immediately acquire the lock and store its own thread state in the
|
|||
global variable). Conversely, when acquiring the lock and restoring the thread
|
||||
state, the lock must be acquired before storing the thread state pointer.
|
||||
|
||||
Why am I going on with so much detail about this? Because when threads are
|
||||
created from C, they don't have the global interpreter lock, nor is there a
|
||||
thread state data structure for them. Such threads must bootstrap themselves
|
||||
into existence, by first creating a thread state data structure, then acquiring
|
||||
the lock, and finally storing their thread state pointer, before they can start
|
||||
using the Python/C API. When they are done, they should reset the thread state
|
||||
pointer, release the lock, and finally free their thread state data structure.
|
||||
It is important to note that when threads are created from C, they don't have
|
||||
the global interpreter lock, nor is there a thread state data structure for
|
||||
them. Such threads must bootstrap themselves into existence, by first
|
||||
creating a thread state data structure, then acquiring the lock, and finally
|
||||
storing their thread state pointer, before they can start using the Python/C
|
||||
API. When they are done, they should reset the thread state pointer, release
|
||||
the lock, and finally free their thread state data structure.
|
||||
|
||||
Threads can take advantage of the :cfunc:`PyGILState_\*` functions to do all of
|
||||
the above automatically. The typical idiom for calling into Python from a C
|
||||
|
|
|
@ -69,7 +69,24 @@ These macros are used in the definition of :ctype:`PyObject` and
|
|||
Note that :cmacro:`PyObject_HEAD` is part of the expansion, and that its own
|
||||
expansion varies depending on the definition of :cmacro:`Py_TRACE_REFS`.
|
||||
|
||||
.. cmacro:: PyObject_HEAD_INIT
|
||||
|
||||
.. cmacro:: PyObject_HEAD_INIT(type)
|
||||
|
||||
This is a macro which expands to initialization values for a new
|
||||
:ctype:`PyObject` type. This macro expands to::
|
||||
|
||||
_PyObject_EXTRA_INIT
|
||||
1, type,
|
||||
|
||||
|
||||
.. cmacro:: PyVarObject_HEAD_INIT(type, size)
|
||||
|
||||
This is a macro which expands to initialization values for a new
|
||||
:ctype:`PyVarObject` type, including the :attr:`ob_size` field.
|
||||
This macro expands to::
|
||||
|
||||
_PyObject_EXTRA_INIT
|
||||
1, type, size,
|
||||
|
||||
|
||||
.. ctype:: PyCFunction
|
||||
|
|
|
@ -45,4 +45,4 @@ s = smtplib.SMTP('localhost')
|
|||
# sendmail function takes 3 arguments: sender's address, recipient's address
|
||||
# and message to send - here it is sent as one string.
|
||||
s.sendmail(me, you, msg.as_string())
|
||||
s.close()
|
||||
s.quit()
|
||||
|
|
|
@ -106,9 +106,8 @@ must be running an SMTP server.
|
|||
fp.close()
|
||||
else:
|
||||
s = smtplib.SMTP()
|
||||
s.connect()
|
||||
s.sendmail(opts.sender, opts.recipients, composed)
|
||||
s.close()
|
||||
s.quit()
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
|
|
@ -27,6 +27,5 @@ for file in pngfiles:
|
|||
|
||||
# Send the email via our own SMTP server.
|
||||
s = smtplib.SMTP()
|
||||
s.connect()
|
||||
s.sendmail(me, family, msg.as_string())
|
||||
s.close()
|
||||
s.quit()
|
||||
|
|
|
@ -20,6 +20,5 @@ msg['To'] = you
|
|||
# Send the message via our own SMTP server, but don't include the
|
||||
# envelope header.
|
||||
s = smtplib.SMTP()
|
||||
s.connect()
|
||||
s.sendmail(me, [you], msg.as_string())
|
||||
s.close()
|
||||
s.quit()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue