7
7
import uuid
8
8
from .predictor import Predictor
9
9
10
+ WORKER_RESPONSE_TIMEOUT = 40
11
+
10
12
11
13
def _child_worker (request_queue , result_queue , model_name , force_cpu ):
12
14
signal .signal (signal .SIGINT , signal .SIG_IGN ) # Ignore Ctrl+C in child
@@ -31,8 +33,7 @@ def _child_worker(request_queue, result_queue, model_name, force_cpu):
31
33
if command == "SET_MODEL" :
32
34
try :
33
35
predictor = Predictor (
34
- model_name = payload ["model_name" ],
35
- force_cpu = payload ["force_cpu" ],
36
+ model_name = payload ["model_name" ], force_cpu = payload ["force_cpu" ]
36
37
)
37
38
result_queue .put ((req_id , {"status" : "OK" }))
38
39
except Exception as e :
@@ -90,6 +91,23 @@ def _start_process(self):
90
91
)
91
92
self ._proc .start ()
92
93
94
+ def _get_response (self , req_id , timeout = WORKER_RESPONSE_TIMEOUT ):
95
+ while True :
96
+ try :
97
+ r_id , data = self ._result_queue .get (timeout = timeout )
98
+ except queue .Empty :
99
+ raise TimeoutError ("No response from worker." )
100
+ if r_id == req_id :
101
+ return data
102
+
103
+ def _wait_for_response (self , req_id ):
104
+ return self ._get_response (req_id , WORKER_RESPONSE_TIMEOUT )
105
+
106
+ async def _wait_for_response_async (self , req_id ):
107
+ return await asyncio .get_event_loop ().run_in_executor (
108
+ None , self ._get_response , req_id , WORKER_RESPONSE_TIMEOUT
109
+ )
110
+
93
111
def set_model (self , model_name , force_cpu = False ):
94
112
with self ._lock :
95
113
self .model_name = model_name
@@ -118,21 +136,6 @@ async def infer(self, images):
118
136
resp = await self ._wait_for_response_async (req_id )
119
137
return resp .get ("result" )
120
138
121
- async def _wait_for_response_async (self , req_id ):
122
- return await asyncio .get_event_loop ().run_in_executor (None , self ._get_response , req_id , 40 )
123
-
124
- def _wait_for_response (self , req_id ):
125
- return self ._get_response (req_id , 40 )
126
-
127
- def _get_response (self , req_id , timeout = 40 ):
128
- while True :
129
- try :
130
- r_id , data = self ._result_queue .get (timeout = timeout )
131
- except queue .Empty :
132
- raise TimeoutError ("No response from worker." )
133
- if r_id == req_id :
134
- return data
135
-
136
139
def reset (self ):
137
140
with self ._lock :
138
141
req_id = str (uuid .uuid4 ())
0 commit comments