static func main() async throws {
NIOSingletons.groupLoopCountSuggestion = 1 // set core count
let app = try await Application.make()
app.databases.use(.postgres(configuration: .init(hostname: "localhost", username: "postgres", database: "test", tls: .prefer(try .init(configuration: .clientDefault)))), as: .psql)
app.get("test") { req async throws -> Int in
return try await User.query(on: req.db).count()
}
try await app.execute()
try await app.asyncShutdown()
}
}
1. Если вручную установить количество ивент лупов = 1
2. Дёрнуть /test эндпоинт
3. Ctrl+C - не завершает процесс
Если не дёргать /test или ивент лупов > 1, тогда Ctrl+C - завершает процесс
Возможно трабла в шатдауне базы?
Стикер
Тэкс, уже этот код почему-то работает нормально
Дом осел, фундамент устоялся :)
Нашёл чего не хватало: NIOSingletons.unsafeTryInstallSingletonPosixEventLoopGroupAsConcurrencyGlobalExecutor() @main enum Entrypoint { static func main() async throws { NIOSingletons.groupLoopCountSuggestion = 1 let app = try await Application.make() let success = NIOSingletons.unsafeTryInstallSingletonPosixEventLoopGroupAsConcurrencyGlobalExecutor() print("Running with \(success ? "SwiftNIO" : "standard") Swift Concurrency default executor") app.databases.use(.postgres(configuration: .init(hostname: "localhost", username: "postgres", database: "test", tls: .prefer(try .init(configuration: .clientDefault)))), as: .psql) app.get("test") { req async throws -> Int in return try await User.query(on: req.db).count() } try await app.execute() try await app.asyncShutdown() } } Если запускается на SwiftNIO Swift Concurrency default executor и дёргаем test эндпоинт - тогда приложение не завершается после Ctrl+C
Обсуждают сегодня