diff options
-rw-r--r-- | docs/python-support.md | 32 | ||||
-rw-r--r-- | event_log.py | 23 |
2 files changed, 43 insertions, 12 deletions
diff --git a/docs/python-support.md b/docs/python-support.md new file mode 100644 index 00000000..af19cd05 --- /dev/null +++ b/docs/python-support.md | |||
@@ -0,0 +1,32 @@ | |||
1 | # Supported Python Versions | ||
2 | |||
3 | With Python 2.7 officially going EOL on [01 Jan 2020](https://pythonclock.org/), | ||
4 | we need a support plan for the repo project itself. | ||
5 | Inevitably, there will be a long tail of users who still want to use Python 2 on | ||
6 | their old LTS/corp systems and have little power to change the system. | ||
7 | |||
8 | ## Summary | ||
9 | |||
10 | * Python 3.6 (released Dec 2016) is required by default starting with repo-1.14. | ||
11 | * Older versions of Python (e.g. v2.7) may use the legacy feature-frozen branch | ||
12 | based on repo-1.13. | ||
13 | |||
14 | ## Overview | ||
15 | |||
16 | We provide a branch for Python 2 users that is feature-frozen. | ||
17 | Bugfixes may be added on a best-effort basis or from the community, but largely | ||
18 | no new features will be added, nor is support guaranteed. | ||
19 | |||
20 | Users can select this during `repo init` time via the [repo launcher]. | ||
21 | Otherwise the default branches (e.g. stable & master) will be used which will | ||
22 | require Python 3. | ||
23 | |||
24 | This means the [repo launcher] needs to support both Python 2 & Python 3, but | ||
25 | since it doesn't import any other repo code, this shouldn't be too problematic. | ||
26 | |||
27 | The master branch will require Python 3.6 at a minimum. | ||
28 | If the system has an older version of Python 3, then users will have to select | ||
29 | the legacy Python 2 branch instead. | ||
30 | |||
31 | |||
32 | [repo launcher]: ../repo | ||
diff --git a/event_log.py b/event_log.py index 508b18ee..0696df50 100644 --- a/event_log.py +++ b/event_log.py | |||
@@ -51,7 +51,6 @@ class EventLog(object): | |||
51 | def __init__(self): | 51 | def __init__(self): |
52 | """Initializes the event log.""" | 52 | """Initializes the event log.""" |
53 | self._log = [] | 53 | self._log = [] |
54 | self._next_id = _EventIdGenerator() | ||
55 | self._parent = None | 54 | self._parent = None |
56 | 55 | ||
57 | def Add(self, name, task_name, start, finish=None, success=None, | 56 | def Add(self, name, task_name, start, finish=None, success=None, |
@@ -71,7 +70,7 @@ class EventLog(object): | |||
71 | A dictionary of the event added to the log. | 70 | A dictionary of the event added to the log. |
72 | """ | 71 | """ |
73 | event = { | 72 | event = { |
74 | 'id': (kind, next(self._next_id)), | 73 | 'id': (kind, _NextEventId()), |
75 | 'name': name, | 74 | 'name': name, |
76 | 'task_name': task_name, | 75 | 'task_name': task_name, |
77 | 'start_time': start, | 76 | 'start_time': start, |
@@ -162,16 +161,16 @@ class EventLog(object): | |||
162 | f.write('\n') | 161 | f.write('\n') |
163 | 162 | ||
164 | 163 | ||
165 | def _EventIdGenerator(): | 164 | # An integer id that is unique across this invocation of the program. |
166 | """Returns multi-process safe iterator that generates locally unique id. | 165 | _EVENT_ID = multiprocessing.Value('i', 1) |
167 | 166 | ||
168 | Yields: | 167 | def _NextEventId(): |
168 | """Helper function for grabbing the next unique id. | ||
169 | |||
170 | Returns: | ||
169 | A unique, to this invocation of the program, integer id. | 171 | A unique, to this invocation of the program, integer id. |
170 | """ | 172 | """ |
171 | eid = multiprocessing.Value('i', 1) | 173 | with _EVENT_ID.get_lock(): |
172 | 174 | val = _EVENT_ID.value | |
173 | while True: | 175 | _EVENT_ID.value += 1 |
174 | with eid.get_lock(): | 176 | return val |
175 | val = eid.value | ||
176 | eid.value += 1 | ||
177 | yield val | ||