, the default heartbeat seems to be 60.
As of newer version > 0.8.x for pika, pika heartbeat set in client side overrides the server side heartbeat (if set).
As of threading: No, do not even attempt threading unless you have already tried everything you can (e.g., call blocking_connection.process_data_event, sending NACK to requeue, etc.) and you are sure that it still does not work. I made this mistake and it ended up adding unnecessary complexities to my application, and it wasted lots of my time.
Threading is the last resort, considering that some services/packages are not thread-safe, and prone to race conditions which requires management of different threads. Hence, why not just use simpler solution that is as just as robust instead.
BlockingConnection.process_data_event is a function in pika. It ensure data events are processed and therefore notifies the server and telling the server that it's still alive, which means by calling BlockingConnection.process_data_event periodically before every heartbeat timeout, the heartbeat is sent back to the server, hence this is probably one of the best solutions to my understanding. I would recommend you to do some digging in their code to understand further, I would say online documentation itself is insufficient. Perhaps, git clone the pika repository, and search for process_data_events if you would like to read more on what it does (there are lots of nice commenting there).
If thread is not used, then there's no point of using thread safe callback. But if you are using threads then yes.
Good luck! Hope this helps. Use your judgement before proceeding with the complexities of multi-threading.