blob: 0f0c53f2baeb1a9c958f3a94b1f1dbe7405bf080 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
# Copyright 2012 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
import os
from portage.util._eventloop.EventLoop import EventLoop
_default_constructor = EventLoop
#from portage.util._eventloop.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
|