Why does Blender crash when trying to place objects with 'threading.Timer()'?
If I understand the code correctly, each place() method then recursively calls 15 more place() after 2 seconds, which each of these instances themselves call place() 15 more times after 2 seconds. etc. I think this will crash any program in python pretty quickly. 

Blender has specialized methods for recurrent calling of methods. See the documentation :
https://docs.blender.org/api/current/bpy.app.timers.html

Exemple :

import bpy


def every_2_seconds():
    print("Hello World")
    return 2.0


bpy.app.timers.register(every_2_seconds)