Stop Xtream imports from freezing the server while fetching from the provider

run_xtream_import made 6 sequential synchronous requests.get() calls
(60s timeout each) directly inside an asyncio task, so the whole
event loop — and every other request/socket the server was handling
— stalled for the full duration of each Xtream import, same failure
mode as the logo-download freeze fixed earlier. Run them through
run_in_executor instead so the loop stays free.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
ubuntu
2026-08-30 23:35:57 +00:00
co-authored by Claude Sonnet 5
parent 0fa98c7283
commit 3eff9519db
+13 -12
View File
@@ -741,19 +741,20 @@ async def run_xtream_import(id_playlist, import_key, collection_channels,
try:
await emit_analysis_progress({'percentage': 0.02}, sidClient)
live_categories = parse_xtream_category_map(
fetch_xtream_json(xtream_server, xtream_username, xtream_password, 'get_live_categories')
)
vod_categories = parse_xtream_category_map(
fetch_xtream_json(xtream_server, xtream_username, xtream_password, 'get_vod_categories')
)
series_categories = parse_xtream_category_map(
fetch_xtream_json(xtream_server, xtream_username, xtream_password, 'get_series_categories')
)
loop = asyncio.get_running_loop()
live_streams = fetch_xtream_json(xtream_server, xtream_username, xtream_password, 'get_live_streams')
vod_streams = fetch_xtream_json(xtream_server, xtream_username, xtream_password, 'get_vod_streams')
series_list = fetch_xtream_json(xtream_server, xtream_username, xtream_password, 'get_series')
async def fetch(action, **extra_params):
return await loop.run_in_executor(
None, lambda: fetch_xtream_json(xtream_server, xtream_username, xtream_password, action, **extra_params)
)
live_categories = parse_xtream_category_map(await fetch('get_live_categories'))
vod_categories = parse_xtream_category_map(await fetch('get_vod_categories'))
series_categories = parse_xtream_category_map(await fetch('get_series_categories'))
live_streams = await fetch('get_live_streams')
vod_streams = await fetch('get_vod_streams')
series_list = await fetch('get_series')
total_steps = max(1, len(live_streams) + len(vod_streams) + len(series_list))
processed_steps = 0