В потоке '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