You won't be able to reduce the number of cores in use by a running job, so you'll have to continue to use the --purge flag to qblock to kick the currently running job off the worker, but you can specify a number of cores to lock with the --range in combination with the purge, so that it will kick the job that's using all the cores off the worker, but then accept another job that is configured to run a specific number of threads.
For example, on a 12-core worker, you can leave 4 cores open with the following:
qblock --range 1-4 --purge
But then you will also need to ensure that the jobs in queue don't use the 'host.processor=1+' reservation (which means "start on a worker with at least 1 free slot).
If you've previously been using the 'render on all cores' checkbox in the submission UI, you'll need to uncheck that and then check the 'Expert Mode' checkbox at the bottom to expose the 'Render App Uses a Specific Number of Threads', tick the 'Slots=Threads' box to ensure that your job reserves as many worker slots as it has running threads, and set the "Specific thread count" to '4'
Check the attached screen shot.
[attachment deleted by admin]