Войти Регистрация
Конкурентность

21. Модерация фото: GlobalScope и runBlocking

Средняя

Kotlin · 32 строк

Объявление публикуется со статусом «на модерации», а фото, от 1 до 10, проверяет классификатор — 300–600 мс на фото. По итогу объявление публикуется или отклоняется.

Отметьте строки с ошибками.

В работе: Автоматическая модерация фото при подаче объявления.

Как проверяем Нажмите на строку с ошибкой и коротко напишите, что не так. Баг засчитан, если отмечена хотя бы одна его строка. Зачёт — найдено не меньше 60 % багов с учётом серьёзности (критичный весит 3, обычный 2, мелкий 1), а лишних отметок не больше, чем багов в коде. Пустые строки, скобки и комментарии лишними не считаем. Плюс 1 вопрос про поведение программы — на зачёт не влияют. Ответ один на подход: после него показываем разбор.
корутиныGlobalScoperunBlockingструктурная конкурентность

Источник: на задачах Авито: модерация объявлений. Условие пересказано своими словами.

Давали на собеседовании? Ответов пока мало — ваш поможет.
  1. import kotlinx.coroutines.GlobalScope
  2. import kotlinx.coroutines.launch
  3. import kotlinx.coroutines.runBlocking
  4. class PhotoModeration(
  5. private val classifier: Classifier,
  6. private val repo: AdRepository,
  7. ) {
  8. // Вызывается из корутины обработчика «Опубликовать объявление».
  9. suspend fun publish(adId: Long, photos: List<String>) {
  10. repo.setStatus(adId, "on_moderation")
  11. GlobalScope.launch {
  12. val verdicts = photos.map { url ->
  13. runBlocking { classifier.check(url) }
  14. }
  15. if (verdicts.all { it }) {
  16. repo.setStatus(adId, "published")
  17. } else {
  18. repo.setStatus(adId, "rejected")
  19. }
  20. }
  21. }
  22. }
  23. interface Classifier {
  24. // Нейросеть проверяет фото на запрещённое, 300–600 мс.
  25. suspend fun check(photoUrl: String): Boolean
  26. }
  27. interface AdRepository {
  28. suspend fun setStatus(adId: Long, status: String)
  29. }