guile-user
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: The equivalent of racket's break-thread in guile?


From: Xin Wang
Subject: Re: The equivalent of racket's break-thread in guile?
Date: Sun, 2 Jun 2013 09:11:28 +0800




2013/6/2 Nala Ginrut <address@hidden>

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.


Thanks, I'll have a look at it.

Recently I need to deploy a Hacker News[1] like service. Paul Graham has released its source with Arc.

PG has not release updated versions for several years, so I think I will need to maintain and fix bugs by myself, and I'd prefer to do such things in Guile instead of Racket.

Currently I'll use Racket to run this service, and it would be great if it can be replaced by Guile eventually.

[1] https://news.ycombinator.com/

 
在 2013-6-2 AM7:49,"Xin Wang" <address@hidden>写道:




2013/5/31 Ludovic Courtès <address@hidden>
Xin Wang <address@hidden> skribis:

> 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

If I understand correctly, “breaks” are similar to Guile’s “asyncs”
(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).

 
Thanks,
Ludo’.





reply via email to

[Prev in Thread] Current Thread [Next in Thread]