Source code for jacinle.concurrency.future
#! /usr/bin/env python3
# -*- coding: utf-8 -*-
# File : future.py
# Author : Jiayuan Mao
# Email : maojiayuan@gmail.com
# Date : 02/18/2018
#
# This file is part of Jacinle.
# Distributed under terms of the MIT license.
import threading
__all__ = ['FutureResult']
[docs]
class FutureResult(object):
"""A thread-safe future implementation. Used only as one-to-one pipe."""
[docs]
def __init__(self):
self._result = None
self._lock = threading.Lock()
self._cond = threading.Condition(self._lock)
[docs]
def put(self, result):
with self._lock:
assert self._result is None, 'Previous result has\'t been fetched.'
self._result = result
self._cond.notify()
[docs]
def get(self):
with self._lock:
if self._result is None:
self._cond.wait()
res = self._result
self._result = None
return res