I am trying to run a thread more than once and keep getting an error:
RuntimeError: threads can only be started once
I have tried reading up multithreading and implementing it in my code without any luck.
Here is the function I am threading:
def receive(q):
host = ""
port = 13000
buf = 1024
addr = (host,port)
Sock = socket(AF_INET, SOCK_DGRAM)
Sock.bind(addr)
(data, addr) = Sock.recvfrom(buf)
q.put(data)
Here is the code I want to run:
q = Queue.Queue()
r = threading.Thread(target=receive, args=(q,))
while True:
r.start()
if q.get() == "stop":
print "Stopped"
break
print "Running program"
When the stop message gets sent, the program should break out of the while loop, but it does not run due to multithreading. The while loop should constantly print out Running program, until the stop message is sent.
The queue is used to receive the variable data from the receive function (which is the stop).
r.start()? Because if no message is received, yourq.get()will returnNone(or maybe it is a blocking function, not sure?) and your code will try to start the thread again, even though the first instance is still running.threadingmodule has no attribute namedthread, so you should be getting anAttributeErrorfrom thethreading.thread(target=receive, args=(q,))statement.threadwith a captial T,Thread. This should return theRuntimeError.