[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: make-thread with lambda form instead of function symbol
From: |
Noam Postavsky |
Subject: |
Re: make-thread with lambda form instead of function symbol |
Date: |
Sun, 16 Apr 2017 12:21:38 -0400 |
On Sun, Apr 16, 2017 at 12:05 PM, Eric Abrahamsen
<address@hidden> wrote:
> I'm trying to do something that seems like it would be a normal use
> case: spawn a series of threads which call the same function using
> different external processes. Practically what this means is that I want
> to pass a function-plus-argument form to make-thread, not a function
> symbol. Something like:
>
> (let* ((results)
> (sources '(source1 source2))
> (threads
> (mapcar
> (lambda (s)
> (make-thread
> (funcall
> (lambda ()
> (push (get-stuff-from-source s) results)))))
> sources)))
> (mapc #'thread-join threads)
> results)
>
> The (funcall (lambda () thing was the only way I could get anything but
> nil out of the thread functions. I think I'm fooling myself, though: so
> far as I can tell, `get-stuff-from-source' is fully evaluated before the
> thread is made, and nothing at all happens during the #'thread-join
> loop.
Just drop the funcall: (make-thread (lambda () ...)) should do what
you want, assuming you have lexical-binding set (if not, you can
construct a lambda-list with backquote or similar).
Re: make-thread with lambda form instead of function symbol, Eli Zaretskii, 2017/04/17