First, note that without specifying an orderby, the order of the records is not guaranteed to follow any particular rule, so you can't be sure which record .last() will return.
Second, your current query is returning
all records from the database, which involves parsing each record into a Row object. Depending on the data in each record and the number of records, this can get slow. However, you only want a single record (it appears you want the one with the most recent created_on date), so you should instead use orderby and limitby:
curr_record = db(db.pushes).select(orderby=~db.pushes.created_on, limitby=(0, 1)).first()
if current_record.created_on.date() < datetime.datetime.now().date():
etc.
To speed things up further, you can define an index on the created_on field.
Anthony