[ВОЛК] вводим ANYIO BACKEND для синхронного потока загрузки картинок
ci/woodpecker/push/woodpecker Pipeline was successful
ci/woodpecker/push/woodpecker Pipeline was successful
This commit is contained in:
+18
@@ -1032,10 +1032,26 @@ def api_publish_post(post_id):
|
||||
# Функция для запуска в отдельном потоке
|
||||
def run_async_func():
|
||||
try:
|
||||
# Устанавливаем правильную политику event loop для работы с anyio
|
||||
# Это критично для правильной работы httpx в отдельном потоке
|
||||
if sys.platform == 'win32':
|
||||
# На Windows используем ProactorEventLoop
|
||||
policy = asyncio.WindowsProactorEventLoopPolicy()
|
||||
else:
|
||||
# На Linux используем DefaultEventLoopPolicy
|
||||
policy = asyncio.DefaultEventLoopPolicy()
|
||||
|
||||
asyncio.set_event_loop_policy(policy)
|
||||
|
||||
# Создаем новый event loop для этого потока
|
||||
# Это важно при работе с gunicorn, который может иметь свой event loop
|
||||
loop = asyncio.new_event_loop()
|
||||
asyncio.set_event_loop(loop)
|
||||
|
||||
# Устанавливаем переменную окружения для anyio backend
|
||||
import os
|
||||
os.environ['ANYIO_BACKEND'] = 'asyncio'
|
||||
|
||||
try:
|
||||
result = loop.run_until_complete(publish_to_tg(post['vk_post_id']))
|
||||
return result
|
||||
@@ -1054,6 +1070,8 @@ def api_publish_post(post_id):
|
||||
pass
|
||||
finally:
|
||||
loop.close()
|
||||
# Сбрасываем политику event loop
|
||||
asyncio.set_event_loop_policy(None)
|
||||
except Exception as e:
|
||||
import traceback
|
||||
log_event(f"Ошибка в run_async_func: {str(e)}\n{traceback.format_exc()}")
|
||||
|
||||
Reference in New Issue
Block a user