我试图多次运行一个线程并不断出现错误:
RuntimeError: threads can only be started once
我尝试读取多线程并在我的代码中实现它,但没有任何运气。
这是我正在线程化的函数:
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)
这是我要运行的代码:
q = Queue.Queue()
r = threading.Thread(target=receive, args=(q,))
while True:
r.start()
if q.get() == "stop":
print "Stopped"
break
print "Running program"
当stop
被发送的消息,该方案应该跳出while循环,但它不会因为多线程运行。while循环应不断打印出Running program
,直到stop
发送消息为止。
队列用于data
从receive
函数(即stop
)接收变量。
这是一个工作示例(适用于python 2.7)。
该程序具有两种操作模式:
注意在while循环外如何调用r.start()
和。另外,有一个循环。r.terminate()
client
receive
while True
import sys
import socket
from multiprocessing import Process, Queue
UDP_ADDR = ("", 13000)
def send(m):
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.sendto(m, UDP_ADDR)
def receive(q):
buf = 1024
Sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
Sock.bind(UDP_ADDR)
while True:
(data, addr) = Sock.recvfrom(buf)
q.put(data)
def client():
q = Queue()
r = Process(target = receive, args=(q,))
r.start()
print "client loop started"
while True:
m = q.get()
print "got:", m
if m == "stop":
break
print "loop ended"
r.terminate()
if __name__ == '__main__':
args = sys.argv
if len(args) > 1:
send(args[1])
else:
client()
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句