mirror of
https://github.com/python/cpython.git
synced 2025-10-17 12:18:23 +00:00
Rename Queue module to queue.
Updated documentation to use new name. Merged revisions 63077 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r63077 | alexandre.vassalotti | 2008-05-11 15:39:48 -0400 (Sun, 11 May 2008) | 3 lines Added stub for the Queue module to be renamed in 3.0. Use the 3.0 module name to avoid spurious warnings. ........
This commit is contained in:
parent
4e3e21e2cf
commit
f260e443ac
12 changed files with 49 additions and 33 deletions
|
@ -1,12 +1,12 @@
|
||||||
|
|
||||||
:mod:`Queue` --- A synchronized queue class
|
:mod:`queue` --- A synchronized queue class
|
||||||
===========================================
|
===========================================
|
||||||
|
|
||||||
.. module:: Queue
|
.. module:: queue
|
||||||
:synopsis: A synchronized queue class.
|
:synopsis: A synchronized queue class.
|
||||||
|
|
||||||
|
|
||||||
The :mod:`Queue` module implements multi-producer, multi-consumer queues.
|
The :mod:`queue` module implements multi-producer, multi-consumer queues.
|
||||||
It is especially useful in threaded programming when information must be
|
It is especially useful in threaded programming when information must be
|
||||||
exchanged safely between multiple threads. The :class:`Queue` class in this
|
exchanged safely between multiple threads. The :class:`Queue` class in this
|
||||||
module implements all the required locking semantics. It depends on the
|
module implements all the required locking semantics. It depends on the
|
||||||
|
@ -20,7 +20,7 @@ the first retrieved (operating like a stack). With a priority queue,
|
||||||
the entries are kept sorted (using the :mod:`heapq` module) and the
|
the entries are kept sorted (using the :mod:`heapq` module) and the
|
||||||
lowest valued entry is retrieved first.
|
lowest valued entry is retrieved first.
|
||||||
|
|
||||||
The :mod:`Queue` module defines the following classes and exceptions:
|
The :mod:`queue` module defines the following classes and exceptions:
|
||||||
|
|
||||||
.. class:: Queue(maxsize)
|
.. class:: Queue(maxsize)
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
|
|
||||||
This module constructs higher-level threading interfaces on top of the lower
|
This module constructs higher-level threading interfaces on top of the lower
|
||||||
level :mod:`thread` module.
|
level :mod:`thread` module.
|
||||||
See also the :mod:`Queue` module.
|
See also the :mod:`queue` module.
|
||||||
|
|
||||||
The :mod:`dummy_threading` module is provided for situations where
|
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.
|
||||||
|
|
|
@ -485,7 +485,7 @@ The :keyword:`raise` statement
|
||||||
If no expressions are present, :keyword:`raise` re-raises the last exception
|
If no expressions are present, :keyword:`raise` re-raises the last exception
|
||||||
that was active in the current scope. If no exception is active in the current
|
that was active in the current scope. If no exception is active in the current
|
||||||
scope, a :exc:`TypeError` exception is raised indicating that this is an error
|
scope, a :exc:`TypeError` exception is raised indicating that this is an error
|
||||||
(if running under IDLE, a :exc:`Queue.Empty` exception is raised instead).
|
(if running under IDLE, a :exc:`queue.Empty` exception is raised instead).
|
||||||
|
|
||||||
Otherwise, :keyword:`raise` evaluates the first expression as the exception
|
Otherwise, :keyword:`raise` evaluates the first expression as the exception
|
||||||
object. It must be either a subclass or an instance of :class:`BaseException`.
|
object. It must be either a subclass or an instance of :class:`BaseException`.
|
||||||
|
|
|
@ -198,7 +198,7 @@ variables, and semaphores.
|
||||||
While those tools are powerful, minor design errors can result in problems that
|
While those tools are powerful, minor design errors can result in problems that
|
||||||
are difficult to reproduce. So, the preferred approach to task coordination is
|
are difficult to reproduce. So, the preferred approach to task coordination is
|
||||||
to concentrate all access to a resource in a single thread and then use the
|
to concentrate all access to a resource in a single thread and then use the
|
||||||
:mod:`Queue` module to feed that thread with requests from other threads.
|
:mod:`queue` module to feed that thread with requests from other threads.
|
||||||
Applications using :class:`Queue` objects for inter-thread communication and
|
Applications using :class:`Queue` objects for inter-thread communication and
|
||||||
coordination are easier to design, more readable, and more reliable.
|
coordination are easier to design, more readable, and more reliable.
|
||||||
|
|
||||||
|
|
|
@ -35,7 +35,7 @@ import SocketServer
|
||||||
import struct
|
import struct
|
||||||
import pickle
|
import pickle
|
||||||
import threading
|
import threading
|
||||||
import Queue
|
import queue
|
||||||
import traceback
|
import traceback
|
||||||
import copyreg
|
import copyreg
|
||||||
import types
|
import types
|
||||||
|
@ -117,8 +117,8 @@ class RPCServer(SocketServer.TCPServer):
|
||||||
#----------------- end class RPCServer --------------------
|
#----------------- end class RPCServer --------------------
|
||||||
|
|
||||||
objecttable = {}
|
objecttable = {}
|
||||||
request_queue = Queue.Queue(0)
|
request_queue = queue.Queue(0)
|
||||||
response_queue = Queue.Queue(0)
|
response_queue = queue.Queue(0)
|
||||||
|
|
||||||
|
|
||||||
class SocketIO(object):
|
class SocketIO(object):
|
||||||
|
@ -413,7 +413,7 @@ class SocketIO(object):
|
||||||
# send queued response if there is one available
|
# send queued response if there is one available
|
||||||
try:
|
try:
|
||||||
qmsg = response_queue.get(0)
|
qmsg = response_queue.get(0)
|
||||||
except Queue.Empty:
|
except queue.Empty:
|
||||||
pass
|
pass
|
||||||
else:
|
else:
|
||||||
seq, response = qmsg
|
seq, response = qmsg
|
||||||
|
|
|
@ -5,7 +5,7 @@ import socket
|
||||||
import traceback
|
import traceback
|
||||||
import thread
|
import thread
|
||||||
import threading
|
import threading
|
||||||
import Queue
|
import queue
|
||||||
|
|
||||||
from idlelib import CallTips
|
from idlelib import CallTips
|
||||||
from idlelib import AutoComplete
|
from idlelib import AutoComplete
|
||||||
|
@ -85,7 +85,7 @@ def main(del_exitfunc=False):
|
||||||
continue
|
continue
|
||||||
try:
|
try:
|
||||||
seq, request = rpc.request_queue.get(block=True, timeout=0.05)
|
seq, request = rpc.request_queue.get(block=True, timeout=0.05)
|
||||||
except Queue.Empty:
|
except queue.Empty:
|
||||||
continue
|
continue
|
||||||
method, args, kwargs = request
|
method, args, kwargs = request
|
||||||
ret = method(*args, **kwargs)
|
ret = method(*args, **kwargs)
|
||||||
|
|
|
@ -90,6 +90,20 @@ class Queue:
|
||||||
self.mutex.release()
|
self.mutex.release()
|
||||||
return n
|
return n
|
||||||
|
|
||||||
|
def empty(self):
|
||||||
|
"""Return True if the queue is empty, False otherwise (not reliable!)."""
|
||||||
|
self.mutex.acquire()
|
||||||
|
n = not self._qsize()
|
||||||
|
self.mutex.release()
|
||||||
|
return n
|
||||||
|
|
||||||
|
def full(self):
|
||||||
|
"""Return True if the queue is full, False otherwise (not reliable!)."""
|
||||||
|
self.mutex.acquire()
|
||||||
|
n = 0 < self.maxsize == self._qsize()
|
||||||
|
self.mutex.release()
|
||||||
|
return n
|
||||||
|
|
||||||
def put(self, item, block=True, timeout=None):
|
def put(self, item, block=True, timeout=None):
|
||||||
"""Put an item into the queue.
|
"""Put an item into the queue.
|
||||||
|
|
|
@ -7,7 +7,7 @@ implementation as its sole argument.
|
||||||
"""
|
"""
|
||||||
import dummy_thread as _thread
|
import dummy_thread as _thread
|
||||||
import time
|
import time
|
||||||
import Queue
|
import queue
|
||||||
import random
|
import random
|
||||||
import unittest
|
import unittest
|
||||||
from test import test_support
|
from test import test_support
|
||||||
|
@ -124,7 +124,7 @@ class ThreadTests(unittest.TestCase):
|
||||||
"""Use to test _thread.start_new_thread() passes args properly."""
|
"""Use to test _thread.start_new_thread() passes args properly."""
|
||||||
queue.put((arg1, arg2))
|
queue.put((arg1, arg2))
|
||||||
|
|
||||||
testing_queue = Queue.Queue(1)
|
testing_queue = queue.Queue(1)
|
||||||
_thread.start_new_thread(arg_tester, (testing_queue, True, True))
|
_thread.start_new_thread(arg_tester, (testing_queue, True, True))
|
||||||
result = testing_queue.get()
|
result = testing_queue.get()
|
||||||
self.failUnless(result[0] and result[1],
|
self.failUnless(result[0] and result[1],
|
||||||
|
@ -148,7 +148,7 @@ class ThreadTests(unittest.TestCase):
|
||||||
queue.put(_thread.get_ident())
|
queue.put(_thread.get_ident())
|
||||||
|
|
||||||
thread_count = 5
|
thread_count = 5
|
||||||
testing_queue = Queue.Queue(thread_count)
|
testing_queue = queue.Queue(thread_count)
|
||||||
if test_support.verbose:
|
if test_support.verbose:
|
||||||
print()
|
print()
|
||||||
print("*** Testing multiple thread creation "\
|
print("*** Testing multiple thread creation "\
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
# Some simple Queue module tests, plus some failure conditions
|
# Some simple queue module tests, plus some failure conditions
|
||||||
# to ensure the Queue locks remain stable.
|
# to ensure the Queue locks remain stable.
|
||||||
import Queue
|
import queue
|
||||||
import sys
|
import sys
|
||||||
import threading
|
import threading
|
||||||
import time
|
import time
|
||||||
|
@ -112,12 +112,12 @@ class BaseQueueTest(unittest.TestCase, BlockingTestMixin):
|
||||||
try:
|
try:
|
||||||
q.put(full, block=0)
|
q.put(full, block=0)
|
||||||
self.fail("Didn't appear to block with a full queue")
|
self.fail("Didn't appear to block with a full queue")
|
||||||
except Queue.Full:
|
except queue.Full:
|
||||||
pass
|
pass
|
||||||
try:
|
try:
|
||||||
q.put(full, timeout=0.01)
|
q.put(full, timeout=0.01)
|
||||||
self.fail("Didn't appear to time-out with a full queue")
|
self.fail("Didn't appear to time-out with a full queue")
|
||||||
except Queue.Full:
|
except queue.Full:
|
||||||
pass
|
pass
|
||||||
# Test a blocking put
|
# Test a blocking put
|
||||||
self.do_blocking_test(q.put, (full,), q.get, ())
|
self.do_blocking_test(q.put, (full,), q.get, ())
|
||||||
|
@ -129,12 +129,12 @@ class BaseQueueTest(unittest.TestCase, BlockingTestMixin):
|
||||||
try:
|
try:
|
||||||
q.get(block=0)
|
q.get(block=0)
|
||||||
self.fail("Didn't appear to block with an empty queue")
|
self.fail("Didn't appear to block with an empty queue")
|
||||||
except Queue.Empty:
|
except queue.Empty:
|
||||||
pass
|
pass
|
||||||
try:
|
try:
|
||||||
q.get(timeout=0.01)
|
q.get(timeout=0.01)
|
||||||
self.fail("Didn't appear to time-out with an empty queue")
|
self.fail("Didn't appear to time-out with an empty queue")
|
||||||
except Queue.Empty:
|
except queue.Empty:
|
||||||
pass
|
pass
|
||||||
# Test a blocking get
|
# Test a blocking get
|
||||||
self.do_blocking_test(q.get, (), q.put, ('empty',))
|
self.do_blocking_test(q.get, (), q.put, ('empty',))
|
||||||
|
@ -196,13 +196,13 @@ class BaseQueueTest(unittest.TestCase, BlockingTestMixin):
|
||||||
|
|
||||||
|
|
||||||
class QueueTest(BaseQueueTest):
|
class QueueTest(BaseQueueTest):
|
||||||
type2test = Queue.Queue
|
type2test = queue.Queue
|
||||||
|
|
||||||
class LifoQueueTest(BaseQueueTest):
|
class LifoQueueTest(BaseQueueTest):
|
||||||
type2test = Queue.LifoQueue
|
type2test = queue.LifoQueue
|
||||||
|
|
||||||
class PriorityQueueTest(BaseQueueTest):
|
class PriorityQueueTest(BaseQueueTest):
|
||||||
type2test = Queue.PriorityQueue
|
type2test = queue.PriorityQueue
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -210,21 +210,21 @@ class PriorityQueueTest(BaseQueueTest):
|
||||||
class FailingQueueException(Exception):
|
class FailingQueueException(Exception):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
class FailingQueue(Queue.Queue):
|
class FailingQueue(queue.Queue):
|
||||||
def __init__(self, *args):
|
def __init__(self, *args):
|
||||||
self.fail_next_put = False
|
self.fail_next_put = False
|
||||||
self.fail_next_get = False
|
self.fail_next_get = False
|
||||||
Queue.Queue.__init__(self, *args)
|
queue.Queue.__init__(self, *args)
|
||||||
def _put(self, item):
|
def _put(self, item):
|
||||||
if self.fail_next_put:
|
if self.fail_next_put:
|
||||||
self.fail_next_put = False
|
self.fail_next_put = False
|
||||||
raise FailingQueueException("You Lose")
|
raise FailingQueueException("You Lose")
|
||||||
return Queue.Queue._put(self, item)
|
return queue.Queue._put(self, item)
|
||||||
def _get(self):
|
def _get(self):
|
||||||
if self.fail_next_get:
|
if self.fail_next_get:
|
||||||
self.fail_next_get = False
|
self.fail_next_get = False
|
||||||
raise FailingQueueException("You Lose")
|
raise FailingQueueException("You Lose")
|
||||||
return Queue.Queue._get(self)
|
return queue.Queue._get(self)
|
||||||
|
|
||||||
class FailingQueueTest(unittest.TestCase, BlockingTestMixin):
|
class FailingQueueTest(unittest.TestCase, BlockingTestMixin):
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,7 @@ import select
|
||||||
import thread, threading
|
import thread, threading
|
||||||
import time
|
import time
|
||||||
import traceback
|
import traceback
|
||||||
import Queue
|
import queue
|
||||||
import sys
|
import sys
|
||||||
import os
|
import os
|
||||||
import array
|
import array
|
||||||
|
@ -96,7 +96,7 @@ class ThreadableTest:
|
||||||
self.server_ready = threading.Event()
|
self.server_ready = threading.Event()
|
||||||
self.client_ready = threading.Event()
|
self.client_ready = threading.Event()
|
||||||
self.done = threading.Event()
|
self.done = threading.Event()
|
||||||
self.queue = Queue.Queue(1)
|
self.queue = queue.Queue(1)
|
||||||
|
|
||||||
# Do some munging to start the client test.
|
# Do some munging to start the client test.
|
||||||
methodname = self.id()
|
methodname = self.id()
|
||||||
|
|
|
@ -21,6 +21,8 @@ Extension Modules
|
||||||
Library
|
Library
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
- The Queue module has been renamed to queue.
|
||||||
|
|
||||||
- The copy_reg module has been renamed to copyreg.
|
- The copy_reg module has been renamed to copyreg.
|
||||||
|
|
||||||
- The mhlib module has been removed.
|
- The mhlib module has been removed.
|
||||||
|
|
|
@ -10,7 +10,7 @@ from Tkinter import *
|
||||||
import websucker
|
import websucker
|
||||||
import os
|
import os
|
||||||
import threading
|
import threading
|
||||||
import Queue
|
import queue
|
||||||
import time
|
import time
|
||||||
|
|
||||||
VERBOSE = 2
|
VERBOSE = 2
|
||||||
|
@ -139,7 +139,7 @@ class App:
|
||||||
|
|
||||||
def go(self, event=None):
|
def go(self, event=None):
|
||||||
if not self.msgq:
|
if not self.msgq:
|
||||||
self.msgq = Queue.Queue(0)
|
self.msgq = queue.Queue(0)
|
||||||
self.check_msgq()
|
self.check_msgq()
|
||||||
if not self.sucker:
|
if not self.sucker:
|
||||||
self.sucker = SuckerThread(self.msgq)
|
self.sucker = SuckerThread(self.msgq)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue