[enh] clitools: Adds a redis generator
This commit is contained in:
		
							parent
							
								
									4470cff98c
								
							
						
					
					
						commit
						93a5bf7fe5
					
				
							
								
								
									
										73
									
								
								clitools/generators/fromRedis.py
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										73
									
								
								clitools/generators/fromRedis.py
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,73 @@ | ||||
| #!/usr/bin/python3 | ||||
| # -*- coding: utf-8 -*- | ||||
| # -*- mode: Python -*- | ||||
| 
 | ||||
| 
 | ||||
| ''' | ||||
| 
 | ||||
| This generator reads a frame from redis | ||||
| v0.1.0 | ||||
| 
 | ||||
| Use it to create feedback loops by writing to the same frame  | ||||
| or to copy the frame from someone else | ||||
| 
 | ||||
| LICENCE : CC | ||||
| 
 | ||||
| by cocoa  | ||||
| 
 | ||||
| ''' | ||||
| 
 | ||||
| from __future__ import print_function | ||||
| import ast | ||||
| import argparse | ||||
| import json | ||||
| import redis | ||||
| import sys | ||||
| import time | ||||
| name="generator::fromRedis" | ||||
| 
 | ||||
| 
 | ||||
| def debug(*args, **kwargs): | ||||
|     if( verbose == False ): | ||||
|         return | ||||
|     print(*args, file=sys.stderr, **kwargs) | ||||
| 
 | ||||
| 
 | ||||
| argsparser      = argparse.ArgumentParser(description="Dummy generator") | ||||
| argsparser.add_argument("-k","--key",required=True,help="Redis key to look after",default=30,type=str) | ||||
| argsparser.add_argument("-i","--ip",help="IP address of the Redis server ",default="127.0.0.1",type=str) | ||||
| argsparser.add_argument("-p","--port",help="Port of the Redis server ",default="6379",type=str) | ||||
| argsparser.add_argument("-f","--fps",help="Frame Per Second",default=30,type=int) | ||||
| argsparser.add_argument("-v","--verbose",action="store_true",help="Verbose output") | ||||
| args = argsparser.parse_args() | ||||
| 
 | ||||
| fps                 = args.fps | ||||
| verbose             = args.verbose | ||||
| key                 = args.key | ||||
| ip                  = args.ip | ||||
| port                = args.port | ||||
| optimal_looptime    = 1 / fps | ||||
| debug(name+" optimal looptime "+str(optimal_looptime)) | ||||
| 
 | ||||
| r = redis.Redis( | ||||
|         host=ip, | ||||
|         port=port) | ||||
| 
 | ||||
| while True: | ||||
|   start = time.time() | ||||
|   # Read from Redis | ||||
|   line = r.get(key) | ||||
|   # Decode as list of tuples | ||||
|   pointsList = ast.literal_eval(line.decode('ascii')) | ||||
|   # convert to list of lists | ||||
|   pointsList  = [list(elem) for elem in pointsList] | ||||
|   # Convert to JSON string | ||||
|   line = json.dumps( pointsList ) | ||||
|   debug(name,"Key:{} line:{}".format(key,line)) | ||||
|   print(line, flush=True); | ||||
|   looptime = time.time() - start | ||||
|   if( looptime < optimal_looptime ): | ||||
|     time.sleep( optimal_looptime - looptime) | ||||
|     debug(name+" micro sleep:"+str( optimal_looptime - looptime)) | ||||
|    | ||||
| 
 | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user