APScheduler Look up object error -


apscheduler (3.3.1) py2.7

i use code job when use memory job store can work have many job , memory in server limit change sqlalchemyjobstore job store got lookup error. how solve it.

code:

def script(indicator, strategy_name, real_time=false):     # solve no handlers found logger “apscheduler.scheduler     import logging     logging.basicconfig(level=logging.error,                         format='%(name)-12s %(asctime)s %(levelname)-8s %(message)s',                         datefmt='%a, %d %b %y %h:%m:%s')     try:         job_defaults = {             'coalesce': false,             'max_instances': 1,             "misfire_grace_time": config.real_time_script_interval + 5,         }         executors = {             'default': threadpoolexecutor(60),         }         jobstores = {             "default": sqlalchemyjobstore(url='sqlite:///jobs.sqlite')         }          scheduler = blockingscheduler(daemonic=true, jobstores=jobstores, job_defaults=job_defaults,                                       executors=executors)         module = __import__("%s.%s" % (indicator, strategy_name), fromlist=[strategy_name])         if real_time:             st in module.strategy:                 scheduler.add_job(st.run, "interval", seconds=config.real_time_script_interval)         else:             st in module.strategy:                 # 计算最近的下一个准点时间                 start_time = _recent_time(st.run_period)                 scheduler.add_job(st.run, "interval", **start_time)         scheduler.start()     except exception e:         logger.get("run-log").error(error_msg()) 

error:

apscheduler.jobstores.default thu, 06 apr 2017 10:50:32 error    unable restore job "d100a4b24e2d49c3ad51305fd846e5f5" -- removing traceback (most recent call last):   file "/users/wyx/bitcoin_workspace/fibo-strategy/.env/lib/python2.7/site-packages/apscheduler/jobstores/sqlalchemy.py", line 135, in _get_jobs     jobs.append(self._reconstitute_job(row.job_state))   file "/users/wyx/bitcoin_workspace/fibo-strategy/.env/lib/python2.7/site-packages/apscheduler/jobstores/sqlalchemy.py", line 122, in _reconstitute_job     job.__setstate__(job_state)   file "/users/wyx/bitcoin_workspace/fibo-strategy/.env/lib/python2.7/site-packages/apscheduler/job.py", line 260, in __setstate__     self.func = ref_to_obj(self.func_ref)   file "/users/wyx/bitcoin_workspace/fibo-strategy/.env/lib/python2.7/site-packages/apscheduler/util.py", line 277, in ref_to_obj     raise lookuperror('error resolving reference %s: error looking object' % ref) lookuperror: error resolving reference base.strategy:strategy.run: error looking object apscheduler.jobstores.default thu, 06 apr 2017 10:50:32 error    unable restore job "2602167cd3c745c2b0764a2b63da1a3a" -- removing traceback (most recent call last):   file "/users/wyx/bitcoin_workspace/fibo-strategy/.env/lib/python2.7/site-packages/apscheduler/jobstores/sqlalchemy.py", line 135, in _get_jobs     jobs.append(self._reconstitute_job(row.job_state))   file "/users/wyx/bitcoin_workspace/fibo-strategy/.env/lib/python2.7/site-packages/apscheduler/jobstores/sqlalchemy.py", line 122, in _reconstitute_job     job.__setstate__(job_state)   file "/users/wyx/bitcoin_workspace/fibo-strategy/.env/lib/python2.7/site-packages/apscheduler/job.py", line 260, in __setstate__     self.func = ref_to_obj(self.func_ref)   file "/users/wyx/bitcoin_workspace/fibo-strategy/.env/lib/python2.7/site-packages/apscheduler/util.py", line 277, in ref_to_obj     raise lookuperror('error resolving reference %s: error looking object' % ref) lookuperror: error resolving reference base.strategy:strategy.run: error looking object apscheduler.jobstores.default thu, 06 apr 2017 10:50:32 error    unable restore job "3eb917670e7642b8848a165268df8913" -- removing traceback (most recent call last):   file "/users/wyx/bitcoin_workspace/fibo-strategy/.env/lib/python2.7/site-packages/apscheduler/jobstores/sqlalchemy.py", line 135, in _get_jobs     jobs.append(self._reconstitute_job(row.job_state))   file "/users/wyx/bitcoin_workspace/fibo-strategy/.env/lib/python2.7/site-packages/apscheduler/jobstores/sqlalchemy.py", line 122, in _reconstitute_job     job.__setstate__(job_state)   file "/users/wyx/bitcoin_workspace/fibo-strategy/.env/lib/python2.7/site-packages/apscheduler/job.py", line 260, in __setstate__     self.func = ref_to_obj(self.func_ref)   file "/users/wyx/bitcoin_workspace/fibo-strategy/.env/lib/python2.7/site-packages/apscheduler/util.py", line 277, in ref_to_obj     raise lookuperror('error resolving reference %s: error looking object' % ref) lookuperror: error resolving reference base.strategy:strategy.run: error looking object 

supplementary instruction alex grönholm's question here because hard in comment

in base/strategy_util.py:

base_strategy classes inherit basestrategy class in base/strategy.py . basestrategy has run method

def _strategy(base_strategy, minute, ticker_table_format):     class strategy(base_strategy):         run_period = minute          def _init_params(self):             self.ticker_table_format = ticker_table_format      return strategy()   def _create_strategy(base_strategy, minute_list=all_minute):     strategy_list = []     minute in minute_list:         ticker_table_format in const.ticker_table_format.all:             st = _strategy(base_strategy, minute, ticker_table_format)             strategy_list.append(st)     return strategy_list   def ma_strategy(base_strategy):     return _create_strategy(base_strategy) 

in ma/touch_avg.py:

ma_touch_avg inherit basestrategy class

from base.strategy import ma_touch_avg base.strategy_util import ma_strategy  strategy = ma_strategy(ma_touch_avg) 

and use click call strategy python run_strategy.py run ma touch_avg

in run_strategy.py:

@cli.command() @click.argument('indicator') @click.argument('strategy_name') def run(indicator, strategy_name):     """ run indicator strategy_name """     real_time_strategy_name = ["touch_avg", "limit"]     util.script(indicator, strategy_name,                 real_time=strategy_name in real_time_strategy_name) 

the reason you're having problem because create class dynamically, in function. apscheduler stores reference scheduled function module:varname. how scheduler expected find class you're making on fly in function?


Comments