class camera_receiver(object): def __init__(self, name, topic, msgtype, verbose=False): self.topic = topic self.msgtype = msgtype self.name = name self.bridge = CvBridge() self.convertor = self.convertor_query() self.verbose = verbose self.subthread = None self.ros_image = LifoQueue(maxsize=5) def callback(self, image): if self.ros_image.full(): #self.ros_image.get() self.ros_image.empty() self.ros_image.put(image) def __call__(self): def monitor(threadnam): # disable_signals could set to be true in the future #rospy.init_node(self.name,anonymous=True) rospy.Subscriber(self.topic, self.msgtype, self.callback) #monitor() #rospy.spin() self.subthread = thread.start_new_thread(monitor, (self.name, )) def convertor_query(self): if self.msgtype == Image: def bridge(image, **args): return self.bridge.imgmsg_to_cv2(image, **args) return bridge elif self.msgtype == CompressedImage: def bridge(image, **args): img_array_1d = np.fromstring(image.data, np.uint8) cv_img = cv2.imdecode(img_array_1d, 1) #cv2.CV_LOAD_IMAGE_COLOR) return cv_img return bridge else: print( "the msgtype for this receiver in only support sensor_msgs.msg.Image and sensor_msgs.msg.CompressedImage" ) self.__del__() def spit(self, **args): # desired_encoding="passthrough" if self.verbose: print('received image of type: "%s"' % ros_data.format) screen = self.convertor(self.ros_image.get(), **args) return screen def __del__(self): print("the camera_receiver {} was deleted".format(self.name))
class Stack(object): """docstring for stack""" def __init__(self, maxsize): if maxsize > 65535: self.throw('StackOverflowError') self.queue = LifoQueue(maxsize) # 栈顶元素出栈,并将其返回 def pop(self): isEmpty = self.queue.empty() if isEmpty: self.throw('this stack is null ') else: return self.queue.get() # 推送一个元素至栈顶 def push(self, value): isFull = self.queue.full() if isFull: self.throw('this stack is full') else: self.queue.put(value) def throw(self, msg): raise BaseException(msg) # 获取queue的队列内容 def list(self): return self.queue.queue # 清空队列 def clear(self): isEmpty = self.queue.empty() if not isEmpty: self.queue.get() self.clear()
from Queue import Queue, LifoQueue, PriorityQueue q = Queue(maxsize=5) lq = LifoQueue(maxsize=6) pq = PriorityQueue(maxsize=5) for i in range(5): q.put(i) lq.put(i) pq.put(i) print "FIFO queue: %s, is empty: %s, size: %s, is full: %s" %(q.queue,q.empty(),q.qsize(),q.full()) print "LIFO queue: %s, is empty: %s, size: %s, is full: %s" %(lq.queue,lq.empty(),lq.qsize(),lq.full()) print "Priority queue: %s, is empty: %s, size: %s, is full: %s" %(pq.queue,pq.empty(),pq.qsize(),pq.full()) print q.get(), lq.get(), pq.get() print "FIFO queue: %s, is empty: %s, size: %s, is full: %s" %(q.queue,q.empty(),q.qsize(),q.full()) print "LIFO queue: %s, is empty: %s, size: %s, is full: %s" %(lq.queue,lq.empty(),lq.qsize(),lq.full()) print "Priority queue: %s, is empty: %s, size: %s, is full: %s" %(pq.queue,pq.empty(),pq.qsize(),pq.full())
from Queue import LifoQueue stack = LifoQueue(maxsize=3) print(stack.qsize()) stack.put('a') stack.put('b') stack.put('c') print("Full: ", stack.full()) print("Size: ", stack.qsize()) print('\nElements poped from the stack') print(stack.get()) print(stack.get()) print(stack.get()) print("Empty: ", stack.empty())