diff options
Diffstat (limited to 'g4f/Provider/helper.py')
-rw-r--r-- | g4f/Provider/helper.py | 38 |
1 files changed, 17 insertions, 21 deletions
diff --git a/g4f/Provider/helper.py b/g4f/Provider/helper.py index 61d9cb62..ded59ee2 100644 --- a/g4f/Provider/helper.py +++ b/g4f/Provider/helper.py @@ -7,9 +7,9 @@ import random import string import secrets import os -from os import path -from asyncio import AbstractEventLoop -from platformdirs import user_config_dir +from os import path +from asyncio import AbstractEventLoop +from platformdirs import user_config_dir from browser_cookie3 import ( chrome, chromium, @@ -25,37 +25,33 @@ from browser_cookie3 import ( from ..typing import Dict, Messages from .. import debug -# Change event loop policy on windows -if sys.platform == 'win32': - if isinstance( - asyncio.get_event_loop_policy(), asyncio.WindowsProactorEventLoopPolicy - ): - asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy()) - # Local Cookie Storage _cookies: Dict[str, Dict[str, str]] = {} -# If event loop is already running, handle nested event loops +# If loop closed or not set, create new event loop. +# If event loop is already running, handle nested event loops. # If "nest_asyncio" is installed, patch the event loop. def get_event_loop() -> AbstractEventLoop: try: - asyncio.get_running_loop() + loop = asyncio.get_event_loop() + loop._check_closed() except RuntimeError: - try: - return asyncio.get_event_loop() - except RuntimeError: - asyncio.set_event_loop(asyncio.new_event_loop()) - return asyncio.get_event_loop() + loop = asyncio.new_event_loop() + asyncio.set_event_loop(loop) try: - event_loop = asyncio.get_event_loop() - if not hasattr(event_loop.__class__, "_nest_patched"): + # Is running event loop + asyncio.get_running_loop() + if not hasattr(loop.__class__, "_nest_patched"): import nest_asyncio - nest_asyncio.apply(event_loop) - return event_loop + nest_asyncio.apply(loop) + except RuntimeError: + # No running event loop + pass except ImportError: raise RuntimeError( 'Use "create_async" instead of "create" function in a running event loop. Or install the "nest_asyncio" package.' ) + return loop def init_cookies(): urls = [ |