If the env or gunicorn has some error, there will not be any error in console
or error log file when we set the subprocss stdout to devnull.
So I set it to None it will inhert its parent process stdout.
When gunicorn cause error, it will show error in console.
For max processes used for computing, we need to make sure every summary directory has a process to load data. We also should not use too many processes to avoid system problems (eg. out of memory). So we calc the max processes cnt in _calc_default_max_processes_cnt
For _load_data_in_thread_wrapper, because self._load_data_in_thread() will create process pool when loading files, we can not afford to run multiple self._load_data_in_thread() simultaneously. So we use a lock to make sure that only one self._load_data_in_thread() is running.
1. To accelerate summary file parsing, multiple processes are used. As the first step to mindinsight parsing performance optimization, we only made changes to _load_single_file function.
2. This PR will imporve summary parsing throughput dramatically (about cpu_count times)
3. Changes are mainly about _load_single_file function
In the future, a more global concurrent computing framework is needed for mindinsight. See the gitee wiki doc for details.