mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 05:31:20 +00:00 
			
		
		
		
	
		
			
	
	
		
			62 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			62 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
|   | # | ||
|  | # Analogue of `multiprocessing.connection` which uses queues instead of sockets | ||
|  | # | ||
|  | # multiprocessing/dummy/connection.py | ||
|  | # | ||
|  | # Copyright (c) 2006-2008, R Oudkerk --- see COPYING.txt | ||
|  | # | ||
|  | 
 | ||
|  | __all__ = [ 'Client', 'Listener', 'Pipe' ] | ||
|  | 
 | ||
|  | from queue import Queue | ||
|  | 
 | ||
|  | 
 | ||
|  | families = [None] | ||
|  | 
 | ||
|  | 
 | ||
|  | class Listener(object): | ||
|  | 
 | ||
|  |     def __init__(self, address=None, family=None, backlog=1): | ||
|  |         self._backlog_queue = Queue(backlog) | ||
|  | 
 | ||
|  |     def accept(self): | ||
|  |         return Connection(*self._backlog_queue.get()) | ||
|  | 
 | ||
|  |     def close(self): | ||
|  |         self._backlog_queue = None | ||
|  | 
 | ||
|  |     address = property(lambda self: self._backlog_queue) | ||
|  | 
 | ||
|  | 
 | ||
|  | def Client(address): | ||
|  |     _in, _out = Queue(), Queue() | ||
|  |     address.put((_out, _in)) | ||
|  |     return Connection(_in, _out) | ||
|  | 
 | ||
|  | 
 | ||
|  | def Pipe(duplex=True): | ||
|  |     a, b = Queue(), Queue() | ||
|  |     return Connection(a, b), Connection(b, a) | ||
|  | 
 | ||
|  | 
 | ||
|  | class Connection(object): | ||
|  | 
 | ||
|  |     def __init__(self, _in, _out): | ||
|  |         self._out = _out | ||
|  |         self._in = _in | ||
|  |         self.send = self.send_bytes = _out.put | ||
|  |         self.recv = self.recv_bytes = _in.get | ||
|  | 
 | ||
|  |     def poll(self, timeout=0.0): | ||
|  |         if self._in.qsize() > 0: | ||
|  |             return True | ||
|  |         if timeout <= 0.0: | ||
|  |             return False | ||
|  |         self._in.not_empty.acquire() | ||
|  |         self._in.not_empty.wait(timeout) | ||
|  |         self._in.not_empty.release() | ||
|  |         return self._in.qsize() > 0 | ||
|  | 
 | ||
|  |     def close(self): | ||
|  |         pass |