0
我已成立等Python的進程字典發送超過插座
manager = Manager();
nodes = manager.dict();
p1 = Process(target = advertise, args=(nodes,));
p1.start();
p2 = Process(target = receive, args=(nodes,));
p2.start();
def advertise(nodes):
while(1):
nts = json.dumps(nodes.copy());
for k, v in nodes.items():
# Creates a UDP socket
mySocket = createSocket(getMyIP(), PORT);
mySocket.connect((getMyIP(), v[1]));
mySocket.send(("AD||" + nts).encode("ASCII"));
mySocket.close();
time.sleep(5);
def receive(nodes):
while(1):
mySocket = createSocket(getMyIP(), PORT);
mySocket.bind((getMyIP(), PORT));
try:
data = mySocket.recv(4096).decode("ASCII").split("||");
if(data[0] == "AD"):
temp = json.loads(data[1]);
#print("Received: " + str(temp));
for k, v in temp.items():
nodes[k] = [float(v[0]), int(v[1])];
except:
mySocket.close();
其中之一接收一個字典和更新值,其中之一發出一個字典的過程。 我不能json.dumps(節點),因爲它說DictProxy不是jsondumpable,所以我做了nts = json.dumps(nodes.copy());
這適用於第一次(插座正確地發送字典),但第二次的方案只是說
File "Dvr.py", line 40, in advertise
nts = json.dumps(nodes.copy());
File "<string>", line 2, in copy
File "/usr/lib/python2.7/multiprocessing/managers.py", line 758, in _callmethod
conn.send((self._id, methodname, args, kwds))
IOError: [Errno 32] Broken pipe
1)爲什麼這只是首次while循環迴路工作?
2)我該如何讓它每次工作?
我不知道,因爲我不不知道你用於套接字連接的庫是什麼,但它可能是(在第二次迭代中),你將一個套接字連接到已經打開的IP和PORT連接(不允許使用庫'socket') –