[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