Ugly but... Chunk up the job and then you call wait with a
sufficiently big number that each chunk's pipes have time to terminate
before the next chunk.

More complicated (but prettier) would be a later -> wait combo (if
possible in your situation):

(dm evalAll> @
   (let Result
      (make
         (for N (getSockNums> This)
            (later (chain (cons "void"))
               (eval> This N (rest)))))
      (wait 5000 (not (memq "void" Result)))
      Result))

The above example queries an arbitrary amount of external databases in
parallel, it waits for 5 seconds or until all of them have returned
something.


On Tue, May 29, 2012 at 5:30 AM, José Romero <j...@2.71828.com.ar> wrote:
> On Mon, 28 May 2012 23:51:21 +0200
> Jorge Acereda <jacer...@gmail.com> wrote:
>
>> Hi,
>>
>> I need to invoke external commands for each entry in my database and
>> I want to run those in parallel, but restricting the number of
>> simultaneous jobs to a certain number to avoid bringing the machine
>> to its knees (sort of 'make -jN').
>>
>> How would you approach such problem?
>>
> First a bit more of information is needed, what do you need to
> parallelize? The processing steps within each entry, or the processing
> of the entries themselves? Are there any dependencies that should be
> taken into account?
>
>> Thanks,
>>   Jorge
>>
>
> Cheers,
> José
> --
> UNSUBSCRIBE: mailto:picolisp@software-lab.de?subjectUnsubscribe
--
UNSUBSCRIBE: mailto:picolisp@software-lab.de?subject=Unsubscribe

Reply via email to