Advertisement
Guest User

Untitled

a guest
Apr 24th, 2024
53
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.69 KB | None | 0 0
  1. window(15).
  2. max_reqs(10).
  3. page_size(5).
  4. total_pages(5).
  5.  
  6. api([[[a,10],[b,11],[c,12],[d,13],[e,14]],
  7. [[f,15],[g,16],[h,16],[i,17],[j,18]],
  8. [[k,19],[l,20],[m,21],[n,22],[o,23]],
  9. [[p,24],[q,25],[r,26],[s,27],[t,28]],
  10. [[u,29],[v,30],[w,31],[x,32],[y,33]]]).
  11.  
  12. elem(P,E,D) :-
  13. api_call_2(E,D,D0),
  14. assert(mydata(P,E,D0)).
  15.  
  16. mt_elem_handler(_,E,_) :- page_size(E),!.
  17. mt_elem_handler(P,E,D) :-
  18. thread_create(elem(P,E,D),_),
  19. succ(E,E0),
  20. mt_elem_handler(P,E0,D).
  21.  
  22. page(P) :-
  23. api_call_1(P,D),
  24. mt_elem_handler(P,0,D).
  25.  
  26. mt_page_handler(P) :- total_pages(P),!.
  27. mt_page_handler(P) :-
  28. thread_create(page(P),_),
  29. succ(P,P0),
  30. flag(count,Count,Count+1),
  31. rate_limit,
  32. mt_page_handler(P0).
  33.  
  34. main :-
  35. rate_limit_init,
  36. mt_page_handler(0).
  37.  
  38. api_call_1(Page,Page_data) :-
  39. atomic_concat("Page: ",Page,Log),
  40. writeln(Log),sleep(2),api(Data),
  41. nth0(Page,Data,Page_data).
  42.  
  43. api_call_2(Elem,Page_data,Elem_data) :-
  44. atomic_concat("Elem: ",Elem,Log),
  45. writeln(Log),
  46. sleep(2),
  47. nth0(Elem,Page_data,[_,Elem_data]).
  48.  
  49. rate_limit :-
  50. window(Window),
  51. req_rate(Limit),
  52. get_flag(count,Count),
  53. get_flag(time,Time),
  54. get_time(Time0),
  55. T_diff is Time0-Time,
  56. (( T_diff >= Window
  57. ; Count >= Limit )
  58. -> Sleep is (Window+1)-T_diff,
  59. atomic_concat("RL: ",Sleep,Log),
  60. writeln(Log),
  61. sleep(Sleep),
  62. writeln("Resuming..."),
  63. get_time(Time1),
  64. flag(count,_,0),
  65. flag(time,_,Time1)
  66. ;
  67. writeln("RL Miss") ).
  68.  
  69. rate_limit_init :-
  70. get_time(Time),
  71. set_flag(time,Time),
  72. set_flag(count,0),
  73. max_reqs(MR),
  74. page_size(PS),
  75. Rate is MR/(PS+1),
  76. floor(Rate,Limit),
  77. assert(req_rate(Limit)).
  78.  
  79. :- dynamic mydata/3.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement