You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I am trying to run a Golang http server through python but then the program cannot be stopped.
I tried to send SIGTERM(ctrl+c)/SIGKILL(ctrl+d) signals from the terminal but it didn't work.
Sending the signal from another terminal works.
NOTE: The example in the README.md says to first enter out folder, but the import does not work from inside the out folder
Run the test
python3 test.py
Then try to stop the process with ctrl+c (NOTE: this interrupt signal works fine if the Go code is compiled as a regular binary and not for the binding)
Workaround
A workaround is to run the server in a goroutine while the main thread block until it receives the signal:
funcRun() {
server:=&http.Server{
Addr: ":8080",
Handler: http.DefaultServeMux,
}
http.HandleFunc("/", helloHandler)
// Channel to listen for OS signalsstop:=make(chan os.Signal, 1)
signal.Notify(stop, os.Interrupt, syscall.SIGTERM)
gofunc() {
iferr:=server.ListenAndServe(); err!=nil&&err!=http.ErrServerClosed {
fmt.Printf("ListenAndServe(): %s\n", err)
}
}()
fmt.Println("Server is ready to handle requests at :8080")
<-stop// Block until we receive a signalfmt.Println("Shutting down the server...")
ctx, cancel:=context.WithTimeout(context.Background(), 5*time.Second)
defercancel()
iferr:=server.Shutdown(ctx); err!=nil {
fmt.Printf("Server Shutdown Failed:%+v", err)
}
fmt.Println("Server stopped")
}
The text was updated successfully, but these errors were encountered:
Summary
I am trying to run a Golang http server through python but then the program cannot be stopped.
I tried to send SIGTERM(ctrl+c)/SIGKILL(ctrl+d) signals from the terminal but it didn't work.
Sending the signal from another terminal works.
Reproduce the error
File structure
. ├── go.mod ├── go.sum ├── main.go ├── Makefile ├── out └── test.py
Files
main.go
Makefile
test.py
NOTE: The example in the README.md says to first enter
out
folder, but the import does not work from inside theout
folderRun the test
Then try to stop the process with
ctrl+c
(NOTE: this interrupt signal works fine if the Go code is compiled as a regular binary and not for the binding)Workaround
A workaround is to run the server in a goroutine while the main thread block until it receives the signal:
The text was updated successfully, but these errors were encountered: