Deleting many rows on a live table in chunks - without locking for too long (PostgreSQL 9.3)
The table itself is only locked in ROW EXCLUSIVE mode, which shouldn't prevent any normal operations on the table, only things like DROP, ALTER, and CREATE INDEX.

Each individual row that is being deleted will be locked for the duration.  This should only block other processes if those other processes are trying to update the rows (or delete them themselves).  Normally with bulk deletions you are deleting rows that no one else cares about, which means no one else will be trying to update them.

If you really need to unlock all the deleted rows and the table periodically, then you need to do each loop of the deletions in a separate transaction.  There is no easy way to do this in a DO block because the entire block runs in a single transaction.  So you should put your loop outside of PostgreSQL, like in bash, perl, python, etc.