Source code for jacinle.concurrency.process
#! /usr/bin/env python3
# -*- coding: utf-8 -*-
# File : process.py
# Author : Jiayuan Mao
# Email : maojiayuan@gmail.com
# Date : 01/19/2018
#
# This file is part of Jacinle.
# Distributed under terms of the MIT license.
import multiprocessing
import os
from jacinle.config.environ import update_env
from jacinle.logging import get_logger
from jacinle.random.rng import gen_seed, reset_global_seed
logger = get_logger(__file__)
__all__ = ['JacProcess']
[docs]
class JacProcess(multiprocessing.Process):
[docs]
def __init__(self, *args, extra_env=None, seed=None, **kwargs):
super().__init__(*args, **kwargs)
if seed is None:
seed = gen_seed()
self._extra_env = extra_env
self._seed = seed
[docs]
def run(self):
if self._extra_env is not None:
update_env(self._extra_env)
reset_global_seed(self._seed)
logger.critical('JacEnvBox pid={} (ppid={}) rng_seed={}.'.format(os.getpid(), os.getppid(), self._seed))
super().run()
[docs]
def __call__(self):
self.start()
self.join()