|
From: | Xin Wang |
Subject: | Re: The equivalent of racket's break-thread in guile? |
Date: | Sun, 2 Jun 2013 09:11:28 +0800 |
If you just need to handle HTTP request or build webapp, I suggest you use my web framework Artanis. It uses Guile inner sever based on thread.
在 2013-6-2 AM7:49,"Xin Wang" <address@hidden>写道:2013/5/31 Ludovic Courtès <address@hidden>
Xin Wang <address@hidden> skribis:
If I understand correctly, “breaks” are similar to Guile’s “asyncs”
> In Guile, the equivalent of kill-thread is cancel-thread, and is there any
> equivalent of break-thread?
>
> [1] http://docs.racket-lang.org/reference/breakhandler.html
(info "(guile) Asyncs").
However, I don’t understand what you’re trying to achieve. Could you
give another example of the behavior you’re after?
I was reading source code of Arc language[1], and wondering if it is possible to port it to Guile.It define a function to handle HTTP request in srv.arc(L48):
(def handle-request-1 (s)
--- pruned ---
(with (th1 nil th2 nil)
(= th1 (thread
(after (handle-request-thread i o ip)
(close i o)
(kill-thread th2))))
(= th2 (thread
(sleep threadlife*)
(unless (dead th1)
(prn "srv thread took too long for " ip))
(break-thread th1)
(force-close i o))))))))It create two threads to handle a request, one do main stuff and anthor one wait to kill first one if it takes too much time.
Although I'm not quite sure, I think one reason to use 'kill-thread' and 'break-thread' differently is to make sure that exception handler function is fully executed. ('after' is implemented by dynamic-wind).
[1] http://ycombinator.com/arc/arc3.1.tarThanks,
Ludo’.
[Prev in Thread] | Current Thread | [Next in Thread] |