How to pluck data every 30's from stream

My Question: How can I pluck data every 30’s from a stream in python. The alpaca api provides hundreds of messages every few seconds but I only want one data point every 30 seconds (to make analysis faster).

My approach:
My approach has been to put my data handler to sleep for 30 seconds and then when it wakes up a for range statement prevents it from collecting more than one data point before it goes back to sleep again.

Actual vs Expected Results:
The message handler works well at recording only one message but instead of recording a message from the second in which it is awake, it is recording what appears to be the next message in the queue, even if I received that message 30 seconds ago and there have been 1000’s of messages since then.

Possabilities: Maybe there is a way to access only the last item in a stream?

#Create data handler for stream 
def on__message(message):

    #for range ensures only one message is recoreded when function is awake
    for i in range(1):

        with open("C:/Users/micha/github/trade_bot/intraday_data.csv", "a") as outfile:

            #pull variables from message
            timestamp = q.timestamp
            bid_price = q.bid_price
            ask_price = q.ask_price

            #create writer object & point at outfile
            writer = csv.writer(outfile)

            #write/append variables to outfile
            writer.writerow([timestamp,bid_price, ask_price])

    #put recorder to sleep for 30s
    time.sleep(30)


#Create stream object 
stream = Stream(APCA_API_KEY_ID,
            APCA_API_SECRET_KEY,
            APCA_API_DATA_URL,
            data_feed='iex')  


#Subscribe to stream and point stream to my handler - 'on_message' 
stream.subscribe_quotes(on_message, 'AAPL')
stream.run()