<div dir="ltr">In jobs, `max_size` has to do with how large the queue is allowed to get.<div>What you appear to be looking for is `counter`.<br><br>Example:<br>Eshell V10.7.2.8  (abort with ^G)<br>1> application:ensure_all_started(jobs).<br>{ok,[jobs]}<br>2> jobs:add_queue(kalle, [{standard_counter,3}]).<br>ok<br>3> [spawn(fun() -> jobs:ask(kalle), io:fwrite("--> ~p: ~p~n", [time(), self()]), timer:sleep(3000), exit(normal) end) || _ <- lists:seq(1,10)].  <br>--> {19,53,29}: <0.128.0><br>--> {19,53,29}: <0.129.0><br>--> {19,53,29}: <0.130.0><br>[<0.128.0>,<0.129.0>,<0.130.0>,<0.131.0>,<0.132.0>,<br> <0.133.0>,<0.134.0>,<0.135.0>,<0.136.0>,<0.137.0>]<br>--> {19,53,32}: <0.131.0><br>--> {19,53,32}: <0.133.0><br>--> {19,53,32}: <0.132.0><br>--> {19,53,35}: <0.134.0><br>--> {19,53,35}: <0.135.0><br>--> {19,53,35}: <0.136.0><br>--> {19,53,38}: <0.137.0><br></div><div><br></div><div>From the docs:</div><div>"{standard_counter, C} - equivalent to [{regulators,[{counter,[{limit,C}, {modifiers,[{cpu,10},{memory,10}]}]}]}]"</div><div><br></div><div>(Usually, one doesn't specify the modifiers)</div><div><br></div><div>BR,</div><div>Ulf</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sat, Nov 13, 2021 at 6:12 PM bengt <<a href="mailto:cean.ebengt@gmail.com">cean.ebengt@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Greetings,<br>
<br>
I would like to allow at most 3 processes to call a gen_server at the same time. I could check the message queue length, but why not use jobs (<a href="https://github.com/uwiger/jobs" rel="noreferrer" target="_blank">https://github.com/uwiger/jobs</a>) ?<br>
<br>
Jobs is already in use by something I depend on, so it should be working. I test from the (iex) shell. As can be seen below I am making a mistake somewhere. Probably config, so how should I configure to only get 3 of the 5 jobs:ask/1 to be approved and queued? Or I have misunderstood the use, and an explanation of how to achieve the 3 caller limitation would be appreciated.<br>
<br>
 :jobs.add_queue(:kalle,  [{:max_size, 3}])<br>
  for _ <- [1,2,3,4,5], do: :jobs.ask(:kalle)<br>
  IO.inspect :jobs.queue_info(:kalle)<br>
<br>
   name: :kalle,<br>
   max_size: 3,<br>
   approved: 5,<br>
   queued: 5,<br>
   latest_dispatch: 378734152926266,<br>
   mod: :jobs_queue,<br>
   type: :fifo,<br>
   group: :undefined,<br>
   regulators: [],<br>
   max_time: :undefined,<br>
   check_interval: :infinity,<br>
   oldest_job: :undefined,<br>
   timer: :undefined,<br>
   link_ref: :undefined,<br>
   check_counter: 0,<br>
   empty: false,<br>
   depleted: false,<br>
   waiters: [],<br>
   stateful: :undefined,<br>
   st: {:st, #Reference<0.2285429207.3584425985.10312>},<br>
   producers: []<br>
<br>
Best Wishes,<br>
bengt</blockquote></div>