mirror of
				https://github.com/django/daphne.git
				synced 2025-11-04 01:27:33 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			35 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			35 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
import time
 | 
						|
import json
 | 
						|
from collections import deque
 | 
						|
from .base import BaseChannelBackend
 | 
						|
 | 
						|
queues = {}
 | 
						|
 | 
						|
class InMemoryChannelBackend(BaseChannelBackend):
 | 
						|
    """
 | 
						|
    In-memory channel implementation. Intended only for use with threading,
 | 
						|
    in low-throughput development environments.
 | 
						|
    """
 | 
						|
 | 
						|
    local_only = True
 | 
						|
 | 
						|
    def send(self, channel, message):
 | 
						|
        # Try JSON encoding it to make sure it would, but store the native version
 | 
						|
        json.dumps(message)
 | 
						|
        # Add to the deque, making it if needs be
 | 
						|
        queues.setdefault(channel, deque()).append(message)
 | 
						|
 | 
						|
    def receive_many(self, channels):
 | 
						|
        if not channels:
 | 
						|
            raise ValueError("Cannot receive on empty channel list!")
 | 
						|
        # Try to pop a message from each channel
 | 
						|
        for channel in channels:
 | 
						|
            try:
 | 
						|
                # This doesn't clean up empty channels - OK for testing.
 | 
						|
                # For later versions, have cleanup w/lock.
 | 
						|
                return channel, queues[channel].popleft()
 | 
						|
            except (IndexError, KeyError):
 | 
						|
                pass
 | 
						|
        return None, None
 | 
						|
 |