В потоке 'uWSGIWorker1Core13' нет текущего цикла событий

Мы столкнулись с ошибкой в одной из наших конечных точек API, которая обрабатывает получение информации о пользователях tiktok. Наше приложение написано на Django и использует фреймворк Django rest. Мы используем uwsgi для обслуживания нашего приложения.

Мы можем обслуживать наше приложение локально с помощью uwsgi, и наша конечная точка API tiktok работает как положено. Однако при создании и развертывании нашего контейнера docker на нашем рабочем сервере мы видим следующий ответ об ошибке при выполнении запроса к нашей конечной точке API tiktok:

В потоке 'uWSGIWorker1Core13' нет текущего цикла событий.

Также важно отметить, что мы запускаем наше приложение в синхронной среде. PyTitktokApi имеет некоторые асинхронные части. Мы думаем, что ошибка связана с этим. Должна быть возможность запускать асинхронный код в синхронной среде.

Вот пример кода нашей конечной точки API и функции, отвечающей за получение информации о пользователе tiktok:

# rest API call
 
class TikTokConnectView(GenericAPIView):
  """
  Connect TikTok App View
  """
  serializer_class = TikTokConnectSerializer
 
  def post(self, request, *args, **kwargs):
    serializer = self.get_serializer(data=request.data)
    serializer.is_valid(raise_exception=True)
    access_token = serializer.validated_data['access_token']
    open_id = serializer.validated_data['open_id']
    response_status, username = tiktok_username(open_id, access_token)
    if not response_status:
      return Response({'detail': 'Error fetching username'}, status=status.HTTP_404_NOT_FOUND)
 
    # response_status, info = asyncio.run(tiktok_user_info(username))
    response_status, info = tiktok_user_info(username)
    if not response_status:
      return Response({'detail': 'Error fetching user info'}, status=status.HTTP_404_NOT_FOUND)
    ...
 
# TiktokAPI Handler
# def _tiktok_user_info(username):
def tiktok_user_info(username):
  verify_fp = "verify_kqtm6ec5_O0nquldq_6nlz_40yf_8aQB_6haj2dd6Fqi1"
  with TikTokApi(custom_verify_fp=verify_fp) as api:
    user = api.user(username=username)
    info = user.info_full()
  return True, info
# tiktok_user_info = sync_to_async(_tiktok_user_info, thread_sensitive=True)
 
# Command for running our django app using uwsqi
uwsgi -i uwsgi.ini --processes 4 --threads 20

Вот ссылка на либу tiktok, отвечающую за получение информации о пользователе tiktok: https://github.com/davidteather/TikTok-Api

Вернуться на верх