Skip to content

Commit a6d06d2

Browse files
authored
Merge pull request #162 from saksham-gera/dev
Added A Functionality to see the ZMQ edge results & Also Added Timeout and Retry Logic for ZeroMQ Connection
2 parents 6ec969f + a52cc74 commit a6d06d2

File tree

3 files changed

+171
-13
lines changed

3 files changed

+171
-13
lines changed

0mq/test0mq4.graphml

Lines changed: 142 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@
22
<graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://www.yworks.com/xml/schema/graphml/1.1/ygraphml.xsd" xmlns:y="http://www.yworks.com/xml/graphml">
33
<key for="node" id="d6" yfiles.type="nodegraphics"/>
44
<key for="edge" id="d10" yfiles.type="edgegraphics"/>
5-
<graph edgedefault="directed" id="1749405632299" projectName="test4fun">
5+
<graph edgedefault="directed" id="1749634499987" projectName="test4fun">
66
<node id="bd92f9d8-7d63-42b2-968b-3909ef4c7237">
77
<data key="d6">
88
<y:ShapeNode>
9-
<y:Geometry height="50" width="136" x="587.1578118466556" y="100.44232926537836"/>
9+
<y:Geometry height="50" width="136" x="590.4776831985885" y="94.90921034549002"/>
1010
<y:Fill color="#ffcc00" opacity="1"/>
1111
<y:BorderStyle color="#000" width="1"/>
1212
<y:NodeLabel>PZ:pmpymax.py</y:NodeLabel>
@@ -17,7 +17,7 @@
1717
<node id="d95f7887-42bf-4e12-a022-021869701c6a">
1818
<data key="d6">
1919
<y:ShapeNode>
20-
<y:Geometry height="50" width="122" x="260.2237964505762" y="311.3201270682564"/>
20+
<y:Geometry height="50" width="122" x="355.1430245621742" y="381.426750852234"/>
2121
<y:Fill color="#ffcc00" opacity="1"/>
2222
<y:BorderStyle color="#000" width="1"/>
2323
<y:NodeLabel>CZ:cpymax.py</y:NodeLabel>
@@ -28,7 +28,7 @@
2828
<node id="f56f8b24-41a6-45b4-882b-6596040b6af0">
2929
<data key="d6">
3030
<y:ShapeNode>
31-
<y:Geometry height="50" width="159" x="603" y="306.7736228262331"/>
31+
<y:Geometry height="50" width="159" x="601.680128648067" y="382.4133655300991"/>
3232
<y:Fill color="#ffcc00" opacity="1"/>
3333
<y:BorderStyle color="#000" width="1"/>
3434
<y:NodeLabel>F1:funcall_zmq.py</y:NodeLabel>
@@ -39,7 +39,7 @@
3939
<node id="db31be3f-3e58-4c36-979d-41fb28aefe68">
4040
<data key="d6">
4141
<y:ShapeNode>
42-
<y:Geometry height="50" width="169" x="336.01863708558665" y="100.93769244530341"/>
42+
<y:Geometry height="50" width="169" x="332.6987657336537" y="94.2979497414374"/>
4343
<y:Fill color="#ffcc00" opacity="1"/>
4444
<y:BorderStyle color="#000" width="1"/>
4545
<y:NodeLabel>F2:funbody_zmq.py</y:NodeLabel>
@@ -54,7 +54,7 @@
5454
<y:Arrows source="none" target="delta"/>
5555
<y:EdgeLabel>U</y:EdgeLabel>
5656
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
57-
<y:Point x="462.11189861303046" y="308.64234395420476"/>
57+
<y:Point x="508.9115766843281" y="382.05264766318663"/>
5858
</y:Path>
5959
</y:GenericEdge>
6060
</data>
@@ -66,7 +66,7 @@
6666
<y:Arrows source="none" target="delta"/>
6767
<y:EdgeLabel>Y</y:EdgeLabel>
6868
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
69-
<y:Point x="367.6090946002987" y="246.02075112116216"/>
69+
<y:Point x="423.7156210948696" y="308.20768730653435"/>
7070
</y:Path>
7171
</y:GenericEdge>
7272
</data>
@@ -78,7 +78,7 @@
7878
<y:Arrows source="none" target="delta"/>
7979
<y:EdgeLabel>U2</y:EdgeLabel>
8080
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
81-
<y:Point x="503.8382244660904" y="100.60667393916803"/>
81+
<y:Point x="503.8382244673214" y="94.70390953396765"/>
8282
</y:Path>
8383
</y:GenericEdge>
8484
</data>
@@ -90,7 +90,7 @@
9090
<y:Arrows source="none" target="delta"/>
9191
<y:EdgeLabel>Y2</y:EdgeLabel>
9292
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
93-
<y:Point x="405.3581746383734" y="34.67328832493144"/>
93+
<y:Point x="398.0428316759128" y="19.435495567257725"/>
9494
</y:Path>
9595
</y:GenericEdge>
9696
</data>
@@ -102,7 +102,7 @@
102102
<y:Arrows source="none" target="delta"/>
103103
<y:EdgeLabel>0x1234_U3</y:EdgeLabel>
104104
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
105-
<y:Point x="485.7225570685165" y="216.3556576357683"/>
105+
<y:Point x="478.81870716131584" y="250.85565763576832"/>
106106
</y:Path>
107107
</y:GenericEdge>
108108
</data>
@@ -599,5 +599,137 @@
599599
</equivalent>
600600
<hash>6455bbb0a3114ec3ba44920b64bd0266</hash>
601601
</actionHistory>
602+
<actionHistory>
603+
<tid>1749634829919</tid>
604+
<inverse>
605+
<actionName>SET_POS</actionName>
606+
<parameters>WyJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiLHsieCI6MjYwLjIyMzc5NjQ1MDU3NjIsInkiOjMxMS4zMjAxMjcwNjgyNTY0fSx7IngiOjI2MS4yMjM3OTY0NTA1NzYyLCJ5IjozODguMzIwMTI3MDY4MjU2NH1d</parameters>
607+
</inverse>
608+
<equivalent>
609+
<actionName>SET_POS</actionName>
610+
<parameters>WyJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiLHsieCI6MjYxLjIyMzc5NjQ1MDU3NjIsInkiOjM4OC4zMjAxMjcwNjgyNTY0fSx7IngiOjI2MC4yMjM3OTY0NTA1NzYyLCJ5IjozMTEuMzIwMTI3MDY4MjU2NH1d</parameters>
611+
</equivalent>
612+
<hash>6db1c3f5876e499e3af23bc64c8c5bb0</hash>
613+
</actionHistory>
614+
<actionHistory>
615+
<tid>1749634829941</tid>
616+
<inverse>
617+
<actionName>SET_POS</actionName>
618+
<parameters>WyJmNTZmOGIyNC00MWE2LTQ1YjQtODgyYi02NTk2MDQwYjZhZjAiLHsieCI6NjAzLCJ5IjozMDYuNzczNjIyODI2MjMzMX0seyJ4Ijo2MDQsInkiOjM4My43NzM2MjI4MjYyMzMxfV0=</parameters>
619+
</inverse>
620+
<equivalent>
621+
<actionName>SET_POS</actionName>
622+
<parameters>WyJmNTZmOGIyNC00MWE2LTQ1YjQtODgyYi02NTk2MDQwYjZhZjAiLHsieCI6NjA0LCJ5IjozODMuNzczNjIyODI2MjMzMX0seyJ4Ijo2MDMsInkiOjMwNi43NzM2MjI4MjYyMzMxfV0=</parameters>
623+
</equivalent>
624+
<hash>cbf7736ec743327ba43b837143224398</hash>
625+
</actionHistory>
626+
<actionHistory>
627+
<tid>1749634835985</tid>
628+
<inverse>
629+
<actionName>SET_POS</actionName>
630+
<parameters>WyJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiLHsieCI6MjYxLjIyMzc5NjQ1MDU3NjIsInkiOjM4OC4zMjAxMjcwNjgyNTY0fSx7IngiOjMzNS4yMjM3OTY0NTA1NzYyLCJ5IjozODAuMzIwMTI3MDY4MjU2NH1d</parameters>
631+
</inverse>
632+
<equivalent>
633+
<actionName>SET_POS</actionName>
634+
<parameters>WyJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiLHsieCI6MzM1LjIyMzc5NjQ1MDU3NjIsInkiOjM4MC4zMjAxMjcwNjgyNTY0fSx7IngiOjI2MS4yMjM3OTY0NTA1NzYyLCJ5IjozODguMzIwMTI3MDY4MjU2NH1d</parameters>
635+
</equivalent>
636+
<hash>bcd1d06be8ec425b80883b7e8ed78ebb</hash>
637+
</actionHistory>
638+
<actionHistory>
639+
<tid>1749634843769</tid>
640+
<inverse>
641+
<actionName>SET_POS</actionName>
642+
<parameters>WyJmNTZmOGIyNC00MWE2LTQ1YjQtODgyYi02NTk2MDQwYjZhZjAiLHsieCI6NjA0LCJ5IjozODMuNzczNjIyODI2MjMzMX0seyJ4Ijo2MDUsInkiOjM3NS43NzM2MjI4MjYyMzMxfV0=</parameters>
643+
</inverse>
644+
<equivalent>
645+
<actionName>SET_POS</actionName>
646+
<parameters>WyJmNTZmOGIyNC00MWE2LTQ1YjQtODgyYi02NTk2MDQwYjZhZjAiLHsieCI6NjA1LCJ5IjozNzUuNzczNjIyODI2MjMzMX0seyJ4Ijo2MDQsInkiOjM4My43NzM2MjI4MjYyMzMxfV0=</parameters>
647+
</equivalent>
648+
<hash>d22a89c1436e739adc827b2c9c5ed9fb</hash>
649+
</actionHistory>
650+
<actionHistory>
651+
<tid>1749638394047</tid>
652+
<inverse>
653+
<actionName>SET_POS</actionName>
654+
<parameters>WyJmNTZmOGIyNC00MWE2LTQ1YjQtODgyYi02NTk2MDQwYjZhZjAiLHsieCI6NjA1LCJ5IjozNzUuNzczNjIyODI2MjMzMX0seyJ4Ijo2MDYuMTA2NjIzNzgzOTc3NiwieSI6Mzg0LjYyNjYxMzA5ODA1NDQ2fV0=</parameters>
655+
</inverse>
656+
<equivalent>
657+
<actionName>SET_POS</actionName>
658+
<parameters>WyJmNTZmOGIyNC00MWE2LTQ1YjQtODgyYi02NTk2MDQwYjZhZjAiLHsieCI6NjA2LjEwNjYyMzc4Mzk3NzYsInkiOjM4NC42MjY2MTMwOTgwNTQ0Nn0seyJ4Ijo2MDUsInkiOjM3NS43NzM2MjI4MjYyMzMxfV0=</parameters>
659+
</equivalent>
660+
<hash>98a2cdaa9c637e3b1f80e191689ef228</hash>
661+
</actionHistory>
662+
<actionHistory>
663+
<tid>1749638406118</tid>
664+
<inverse>
665+
<actionName>SET_POS</actionName>
666+
<parameters>WyJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiLHsieCI6MzM1LjIyMzc5NjQ1MDU3NjIsInkiOjM4MC4zMjAxMjcwNjgyNTY0fSx7IngiOjM1NS4xNDMwMjQ1NjIxNzQyLCJ5IjozODEuNDI2NzUwODUyMjM0fV0=</parameters>
667+
</inverse>
668+
<equivalent>
669+
<actionName>SET_POS</actionName>
670+
<parameters>WyJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiLHsieCI6MzU1LjE0MzAyNDU2MjE3NDIsInkiOjM4MS40MjY3NTA4NTIyMzR9LHsieCI6MzM1LjIyMzc5NjQ1MDU3NjIsInkiOjM4MC4zMjAxMjcwNjgyNTY0fV0=</parameters>
671+
</equivalent>
672+
<hash>461addecc2f83c39d144dd59fe140d7a</hash>
673+
</actionHistory>
674+
<actionHistory>
675+
<tid>1749638411387</tid>
676+
<inverse>
677+
<actionName>SET_POS</actionName>
678+
<parameters>WyJmNTZmOGIyNC00MWE2LTQ1YjQtODgyYi02NTk2MDQwYjZhZjAiLHsieCI6NjA2LjEwNjYyMzc4Mzk3NzYsInkiOjM4NC42MjY2MTMwOTgwNTQ0Nn0seyJ4Ijo2MDEuNjgwMTI4NjQ4MDY3LCJ5IjozODIuNDEzMzY1NTMwMDk5MX1d</parameters>
679+
</inverse>
680+
<equivalent>
681+
<actionName>SET_POS</actionName>
682+
<parameters>WyJmNTZmOGIyNC00MWE2LTQ1YjQtODgyYi02NTk2MDQwYjZhZjAiLHsieCI6NjAxLjY4MDEyODY0ODA2NywieSI6MzgyLjQxMzM2NTUzMDA5OTF9LHsieCI6NjA2LjEwNjYyMzc4Mzk3NzYsInkiOjM4NC42MjY2MTMwOTgwNTQ0Nn1d</parameters>
683+
</equivalent>
684+
<hash>a65da086d27f4b89fde06386803b6c83</hash>
685+
</actionHistory>
686+
<actionHistory>
687+
<tid>1749638417166</tid>
688+
<inverse>
689+
<actionName>SET_POS</actionName>
690+
<parameters>WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLHsieCI6NTg3LjE1NzgxMTg0NjY1NTYsInkiOjEwMC40NDIzMjkyNjUzNzgzNn0seyJ4Ijo1OTEuNTg0MzA2OTgyNTY2MiwieSI6MTAxLjU0ODk1MzA0OTM1NjAzfV0=</parameters>
691+
</inverse>
692+
<equivalent>
693+
<actionName>SET_POS</actionName>
694+
<parameters>WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLHsieCI6NTkxLjU4NDMwNjk4MjU2NjIsInkiOjEwMS41NDg5NTMwNDkzNTYwM30seyJ4Ijo1ODcuMTU3ODExODQ2NjU1NiwieSI6MTAwLjQ0MjMyOTI2NTM3ODM2fV0=</parameters>
695+
</equivalent>
696+
<hash>f084c23a413d578cc6f24c99f4abf593</hash>
697+
</actionHistory>
698+
<actionHistory>
699+
<tid>1749638421768</tid>
700+
<inverse>
701+
<actionName>SET_POS</actionName>
702+
<parameters>WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLHsieCI6NTkxLjU4NDMwNjk4MjU2NjIsInkiOjEwMS41NDg5NTMwNDkzNTYwM30seyJ4Ijo1OTAuNDc3NjgzMTk4NTg4NSwieSI6OTQuOTA5MjEwMzQ1NDkwMDJ9XQ==</parameters>
703+
</inverse>
704+
<equivalent>
705+
<actionName>SET_POS</actionName>
706+
<parameters>WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLHsieCI6NTkwLjQ3NzY4MzE5ODU4ODUsInkiOjk0LjkwOTIxMDM0NTQ5MDAyfSx7IngiOjU5MS41ODQzMDY5ODI1NjYyLCJ5IjoxMDEuNTQ4OTUzMDQ5MzU2MDN9XQ==</parameters>
707+
</equivalent>
708+
<hash>7351dd339614af3284a27265645c683e</hash>
709+
</actionHistory>
710+
<actionHistory>
711+
<tid>1749638428404</tid>
712+
<inverse>
713+
<actionName>SET_POS</actionName>
714+
<parameters>WyJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiLHsieCI6MzM2LjAxODYzNzA4NTU4NjY1LCJ5IjoxMDAuOTM3NjkyNDQ1MzAzNDF9LHsieCI6MzM0LjkxMjAxMzMwMTYwODk3LCJ5Ijo5MC45NzgwNzgzODk1MDQ0fV0=</parameters>
715+
</inverse>
716+
<equivalent>
717+
<actionName>SET_POS</actionName>
718+
<parameters>WyJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiLHsieCI6MzM0LjkxMjAxMzMwMTYwODk3LCJ5Ijo5MC45NzgwNzgzODk1MDQ0fSx7IngiOjMzNi4wMTg2MzcwODU1ODY2NSwieSI6MTAwLjkzNzY5MjQ0NTMwMzQxfV0=</parameters>
719+
</equivalent>
720+
<hash>e6e0b6e82708953b8f2a3a53d75d7480</hash>
721+
</actionHistory>
722+
<actionHistory>
723+
<tid>1749638434730</tid>
724+
<inverse>
725+
<actionName>SET_POS</actionName>
726+
<parameters>WyJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiLHsieCI6MzM0LjkxMjAxMzMwMTYwODk3LCJ5Ijo5MC45NzgwNzgzODk1MDQ0fSx7IngiOjMzMi42OTg3NjU3MzM2NTM3LCJ5Ijo5NC4yOTc5NDk3NDE0Mzc0fV0=</parameters>
727+
</inverse>
728+
<equivalent>
729+
<actionName>SET_POS</actionName>
730+
<parameters>WyJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiLHsieCI6MzMyLjY5ODc2NTczMzY1MzcsInkiOjk0LjI5Nzk0OTc0MTQzNzR9LHsieCI6MzM0LjkxMjAxMzMwMTYwODk3LCJ5Ijo5MC45NzgwNzgzODk1MDQ0fV0=</parameters>
731+
</equivalent>
732+
<hash>5308877f34d57a16e83da8243a43a98f</hash>
733+
</actionHistory>
602734
</graph>
603735
</graphml>

concore.py

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,38 @@ def __init__(self, port_type, address, zmq_socket_type):
2020
self.socket = self.context.socket(zmq_socket_type)
2121
self.port_type = port_type # "bind" or "connect"
2222
self.address = address
23+
24+
self.socket.setsockopt(zmq.RCVTIMEO, 2000)
25+
self.socket.setsockopt(zmq.SNDTIMEO, 2000)
26+
self.socket.setsockopt(zmq.LINGER, 0)
27+
2328
if self.port_type == "bind":
2429
self.socket.bind(address)
2530
print(f"ZMQ Port bound to {address}")
2631
else:
2732
self.socket.connect(address)
2833
print(f"ZMQ Port connected to {address}")
34+
35+
def send_json_with_retry(self, message):
36+
for attempt in range(5):
37+
try:
38+
self.socket.send_json(message)
39+
return
40+
except zmq.Again:
41+
print(f"Send timeout (attempt {attempt + 1}/5)")
42+
time.sleep(0.5)
43+
print("Failed to send after retries.")
44+
return
45+
46+
def recv_json_with_retry(self):
47+
for attempt in range(5):
48+
try:
49+
return self.socket.recv_json()
50+
except zmq.Again:
51+
print(f"Receive timeout (attempt {attempt + 1}/5)")
52+
time.sleep(0.5)
53+
print("Failed to receive after retries.")
54+
return None
2955

3056
# Global ZeroMQ ports registry
3157
zmq_ports = {}
@@ -143,7 +169,7 @@ def read(port_identifier, name, initstr_val):
143169
if isinstance(port_identifier, str) and port_identifier in zmq_ports:
144170
zmq_p = zmq_ports[port_identifier]
145171
try:
146-
message = zmq_p.socket.recv_json()
172+
message = zmq_p.recv_json_with_retry()
147173
return message
148174
except zmq.error.ZMQError as e:
149175
print(f"ZMQ read error on port {port_identifier} (name: {name}): {e}. Returning default.")
@@ -209,12 +235,12 @@ def write(port_identifier, name, val, delta=0):
209235
if isinstance(port_identifier, str) and port_identifier in zmq_ports:
210236
zmq_p = zmq_ports[port_identifier]
211237
try:
212-
zmq_p.socket.send_json(val)
238+
zmq_p.send_json_with_retry(val)
213239
except zmq.error.ZMQError as e:
214240
print(f"ZMQ write error on port {port_identifier} (name: {name}): {e}")
215241
except Exception as e:
216242
print(f"Unexpected error during ZMQ write on port {port_identifier} (name: {name}): {e}")
217-
return
243+
218244
try:
219245
if isinstance(port_identifier, str) and port_identifier in zmq_ports:
220246
file_path = os.path.join("../"+port_identifier, name)

0 commit comments

Comments
 (0)