2012-10-10 26 views

Trả lời

4

Trên thực tế, bạn có thể cho người giám sát ngay lập tức khởi động lại con của nó và thực hiện những gì được gọi lười biếng khởi:

  1. Giám sát viên (lại) bắt đầu (ngay lập tức) đứa trẻ (ví dụ, một gen_server)
  2. các gen_server trả về một thời gian chờ 0 trong hàm init của nó
  3. trong handle_info bạn làm một chờ đợi tích cực (10 giây của bạn) để đảm bảo DB là đúng cách khởi tạo

Bằng cách này, bạn đảm bảo rằng tất cả các yêu cầu đến gen_server được xử lý sau khi DB được khởi tạo đúng cách.

+0

Cảm ơn bạn, nhưng tôi không gặp vấn đề với init gen_server, tôi muốn có khoảng thời gian (ngủ) giữa lần khởi động lại. – kolchanov

+2

Tôi nghĩ những gì @Robert Aloi gợi ý sẽ hoạt động. Init của gen_server sẽ không cố gắng kết nối lại, thay vào đó nó trả về thời gian chờ 0 sẽ thỏa mãn người giám sát mà đứa trẻ đã bắt đầu. Sau đó, trong hàm handle_info bạn thực hiện khởi tạo "thực" ... Sau khi ngủ trong 10 giây – Jr0

+0

Hoặc thậm chí tốt hơn sau khi đảm bảo rằng DB còn sống. Chờ một khoảng thời gian cố định là gốc rễ của tất cả các tệ nạn. –

Các vấn đề liên quan