If you are looking to looking to delete all the rows in the table the most efficient way to do this is to use "TRUNCATE TABLE table_name".
Or perhaps you are looking to use a WHERE clause? To my knowledge, MySQL does not provide such a backgroud process option but you could do it if you have access to cron, executing a SQL command via a script, which perhaps uses the MySQL "LIMIT" option.
We generally don't call a function to ask if the database is busy or not.
For more replies, you might share how long the 300k row delete query takes to run on your system, how may users, etc.