2014-11-30 1 views
9
using HttpServer 

http = HttpHandler() do request::Request, response::Response 
    show(request) 
    Response("Hello there") 
end 

http.events["error"] = (client, error) -> println(error) 
http.events["listen"] = (port) -> println("Listening on $port") 
server = Server(http) 

t = @async run(server, 3000) 

Это асинхронно запускает простой небольшой веб-сервер. Проблема в том, что я понятия не имею, как остановить ее. Я просматриваю документацию Julia и пытаюсь найти какую-то функцию, которая удалит эту задачу из очереди (kill, interrupt и т. Д.), Но ничего не работает.Как убить задачу/сопрограмму в Джулии?

Как я могу убить эту задачу?

+0

Простое решение вашей проблемы будет переопределять [Run] (https://github.com/JuliaWeb/HttpServer.jl/blob/master/src/HttpServer.jl#L204) с аннулированию цикла , Джулия использует libuv, поэтому 'accept' действительно [uv_accept] (http://docs.libuv.org/en/v1.x/stream.html#c.uv_accept). См. [Uv_connection_cb] (http://docs.libuv.org/en/v1.x/stream.html#c.uv_connection_cb). – Phillip

+0

Спасибо, но я действительно искал немного более общего, чем это. HTTP-сервер - это всего лишь пример асинхронной задачи. – Nick

ответ

5

Я не вижу официального способа выполнить задачу специально, но я думаю, что общее решение было the addition of throwto,, что позволяет сразу планировать задачу с ожидающим исключением.

... 
t = @async run(server, 3000) 
... 
ex = InterruptException() 
Base.throwto(t, ex) 
close(http.sock) # ideally HttpServer would catch exception to cleanup