| # Copyright 2012 Gentoo Foundation |
| # Distributed under the terms of the GNU General Public License v2 |
| |
| import os |
| |
| from .EventLoop import EventLoop |
| |
| _default_constructor = EventLoop |
| #from .GlibEventLoop import GlibEventLoop as _default_constructor |
| |
| # If _default_constructor doesn't support multiprocessing, |
| # then _multiprocessing_constructor is used in subprocesses. |
| _multiprocessing_constructor = EventLoop |
| |
| _MAIN_PID = os.getpid() |
| _instances = {} |
| |
| def global_event_loop(): |
| """ |
| Get a global EventLoop (or compatible object) instance which |
| belongs exclusively to the current process. |
| """ |
| |
| pid = os.getpid() |
| instance = _instances.get(pid) |
| if instance is not None: |
| return instance |
| |
| constructor = _default_constructor |
| if not constructor.supports_multiprocessing and pid != _MAIN_PID: |
| constructor = _multiprocessing_constructor |
| |
| instance = constructor() |
| _instances[pid] = instance |
| return instance |