Is it possible to achieve a spirograph efect?
How about tracing the position of your object with an edgeline?

import bpy

start_frame = 1 # when do you want to start the tracking?
end_frame = 1000 # and when should it stop again?
stylus = 'Empty' # name of the object to track
new_name = "Whirl" # name of the created object

verts = [] # list of all vertices
edges = [] # list of all edges

sce = bpy.context.scene # the current scene
old_frame = sce.frame_current # remember the current frame

vertex_count = start_frame
while vertex_count &lt;= end_frame: # iterate through the specified time
    sce.frame_set(vertex_count) # set the frame so the object is in the right place for any given frame
    loc = bpy.data.objects[stylus].matrix_world.translation # the global coordinates of the stylus
    verts.append((loc.x, loc.y, loc.z)) # add the position to the vertex list  
    vertex_count += 1

edge_count = 1 # starting with the second vert because the edge list is one item shorter
end = len(verts)

while edge_count &lt; end: # building the edges
    edges.append((edge_count - 1, edge_count)) # assigns the indices of the verts to the edges
    edge_count += 1

#edges = [(x-1 , x) for x in range(len(verts)) if x &gt; 0] # this does the same as the above edge code. list comprehensions are scary 

mesh_data = bpy.data.meshes.new(new_name + '-mesh') # makes a new mesh
mesh_data.from_pydata(verts, edges, []) # fills verts and edges into the mesh
mesh_data.update()

obj = bpy.data.objects.new(new_name, mesh_data) # makes a new object with the mesh linked
sce.objects.link(obj)

sce.frame_set(old_frame) # repair the frame position






You can even animate it using a Build Modifier. And if you want a particle effect, just convert the mesh into a curve with ALTC, maybe change the spline type into bezier with auto handles and you can let a particle emitter follow the path.