Is this code actually correct?
You call this in multithreading:
time.sleep(3)
multi = threading.Thread(target=multithreading)
multi.start()
You are basically telling every thread to create a copy of itself after 3 seconds... I think you are missing the point of a thread. You should probably have a (single) thread running in a while loop that gets data from a Queue.
Whenever you want the thread to act on something, you add it to the Queue.
Edit: Example code
import threading
import Queue
import time
def f(q):
while True:
print q.get() #block thread until something shows up
q = Queue.Queue()
t = threading.Thread(target=f,args=[q])
t.daemon = True #if parent dies, kill thread
t.start()
for x in range(0,1000):
q.put(x)
time.sleep(1)