MCPcopy Create free account
hub / github.com/MegEngine/MegEngine / check_any_worker_failed

Function check_any_worker_failed

imperative/python/src/utils.cpp:215–252  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

213static std::unordered_map<int64_t, std::set<pid_t>> worker_pids = {};
214
215static void check_any_worker_failed() {
216 int error;
217 std::set<pid_t>* pid_set;
218 pid_t worker_pid;
219 siginfo_t infop;
220
221 for (auto& w : worker_pids) {
222 pid_set = &(w.second);
223 for (auto pid_it = pid_set->begin(); pid_it != pid_set->end(); ++pid_it) {
224 worker_pid = *pid_it;
225 infop.si_pid = 0;
226 error = waitid(P_PID, worker_pid, &infop, WEXITED | WNOHANG | WNOWAIT);
227 if (error < 0 || infop.si_pid == 0)
228 continue;
229 if (infop.si_code == CLD_EXITED &&
230 infop.si_status != EXIT_SUCCESS) { // exit with error
231 std::ostringstream oss;
232 oss << "DataLoader worker (pid " << worker_pid << ") exited "
233 << "unexpectedly with exit code " << infop.si_status << ". ";
234 pid_set->clear();
235 throw std::runtime_error(oss.str());
236 } else if (
237 infop.si_code == CLD_KILLED ||
238 infop.si_code == CLD_DUMPED) { // killed by signal
239 std::ostringstream oss;
240 oss << "DataLoader worker (pid " << worker_pid << ") is killed "
241 << "by signal: " << strsignal(infop.si_status) << ". "
242 << "This error maybe casued by other libraries is not supported "
243 << "well in mutiprocessing(fork), e.g. grpcio this python library. "
244 << "Please check grpcio version and try to a lower version like "
245 "1.47.0. If grpcio version is suitable, please check your "
246 "environment.";
247 pid_set->clear();
248 throw std::runtime_error(oss.str());
249 }
250 }
251 }
252}
253
254inline int64_t unpackLong(PyObject* obj) {
255 int overflow;

Callers 1

init_utilsFunction · 0.85

Calls 4

beginMethod · 0.45
endMethod · 0.45
clearMethod · 0.45
strMethod · 0.45

Tested by

no test coverage detected