mirror of
https://github.com/wassname/catalyst.git
synced 2026-07-20 12:20:29 +08:00
Remove module scope invocations of `get_calendar('NYSE')`, which cuts
zipline import time in half on my machine. This make the zipline CLI
noticeably more responsive, and it reduces memory consumed at import
time from 130MB to 90MB.
Before:
$ time python -c 'import zipline'
real 0m1.262s
user 0m1.128s
sys 0m0.120s
After:
$ time python -c 'import zipline'
real 0m0.676s
user 0m0.536s
sys 0m0.132s
81 lines
2.3 KiB
Python
81 lines
2.3 KiB
Python
#
|
|
# Copyright 2015 Quantopian, Inc.
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
import os
|
|
|
|
|
|
if os.name == 'nt':
|
|
# we need to be able to write to our temp directoy on windows so we
|
|
# create a subdir in %TMP% that has write access and use that as %TMP%
|
|
def _():
|
|
import atexit
|
|
import tempfile
|
|
|
|
tempfile.tempdir = tempdir = tempfile.mkdtemp()
|
|
|
|
@atexit.register
|
|
def cleanup_tempdir():
|
|
import shutil
|
|
shutil.rmtree(tempdir)
|
|
_()
|
|
del _
|
|
|
|
|
|
# This is *not* a place to dump arbitrary classes/modules for convenience,
|
|
# it is a place to expose the public interfaces.
|
|
from . import data
|
|
from . import finance
|
|
from . import gens
|
|
from . import utils
|
|
from .utils.calendars import get_calendar
|
|
from .utils.run_algo import run_algorithm
|
|
from ._version import get_versions
|
|
__version__ = get_versions()['version']
|
|
del get_versions
|
|
|
|
# These need to happen after the other imports.
|
|
from . algorithm import TradingAlgorithm
|
|
from . import api
|
|
|
|
|
|
def load_ipython_extension(ipython):
|
|
from .__main__ import zipline_magic
|
|
ipython.register_magic_function(zipline_magic, 'line_cell', 'zipline')
|
|
|
|
|
|
# PERF: Fire a warning if calendars were instantiated during zipline import.
|
|
# Having calendars doesn't break anything per-se, but it makes zipline imports
|
|
# noticeably slower, which becomes particularly noticeable in the Zipline CLI.
|
|
from zipline.utils.calendars.calendar_utils import global_calendar_dispatcher
|
|
if global_calendar_dispatcher._calendars:
|
|
import warnings
|
|
warnings.warn(
|
|
"Found TradingCalendar instances after zipline import.\n"
|
|
"Zipline startup will be much slower until this is fixed!",
|
|
)
|
|
del warnings
|
|
del global_calendar_dispatcher
|
|
|
|
|
|
__all__ = [
|
|
'TradingAlgorithm',
|
|
'api',
|
|
'data',
|
|
'finance',
|
|
'get_calendar',
|
|
'gens',
|
|
'run_algorithm',
|
|
'utils',
|
|
]
|