APSwork 部分内容
redis_cOnnet= redis.Redis(host='localhost', port=6379, db=0) jobstores = { 'redis': RedisJobStore(), } executors = { 'default': ThreadPoolExecutor(4) } sched = BackgroundScheduler(jobstores=jobstores, executors=executors) def open_in(servername,serverip,cmd): print '{0}--open in ....'.format(servername) ..... def open_out(servername,serverip,cmd): print '{0}---open out ....'.format(servername) ..... def cronKaifu(starttime,servername,serverip,cmd_in,cmd_out): .... jobstores = { 'redis': RedisJobStore(), } executors = { 'default': ThreadPoolExecutor(1) # 'processpool': ProcessPoolExecutor(3) } sched = BackgroundScheduler(jobstores=jobstores, executors=executors) sched.add_job(func=open_in,args=(servername,serverip,cmd_in,),trigger='date',nex_run_time=open_in_time,jobstore='redis',id='{0}_in_{1}'.format(servername,sendtime_timestamp_in)) print sched.get_jobs() sched.add_job(func=open_out,args=(servername,serverip,cmd_out,),trigger='date',next_run_time=open_out_time,jobstore='redis',id='{0}_out_{1}'.format(servername,sendtime_timestamp_out)) print sched.get_jobs() sched.start() views.py 里面调用这个任务
def kaifu_time(request): .... .... cronKaifu(timeArray,server_name,server_ip,open_in_cmd,open_out_cmd) ...... .... return render(request, 'mt/kaifu_time.html', locals()) 添加任务后,两次打印 get_jobs()内容
[<Job (id=mt_ios999game_in_1516005540000 name=open_in)>] [<Job (id=mt_ios999game_in_1516005540000 name=open_in)>, <Job (id=mt_ios999game_out_1516006260000 name=open_out)>] 到点后,id=mt_ios999game_in_1516005540000,会被执行 2 次,有时候会是 3 次,但有时候又是正常的。
[15/Jan/2018 15:02:22] "POST /mt/kaifu_time/ HTTP/1.1" 302 0 [15/Jan/2018 15:02:22] "GET /mt/kaifu_time HTTP/1.1" 301 0 [15/Jan/2018 15:02:22] "GET /mt/kaifu_time/ HTTP/1.1" 200 19539 mt_ios999game--open in .... mt_ios999game--open in .... <==这里的打印两次 Exception in thread APScheduler: Traceback (most recent call last): File "/usr/local/lib/python2.7/threading.py", line 801, in __bootstrap_inner self.run() File "/usr/local/lib/python2.7/threading.py", line 754, in run self.__target(*self.__args, **self.__kwargs) File "/qzdata1/python_env/LazyOps/lib/python2.7/site-packages/apscheduler/schedulers/blocking.py", line 30, in _main_loop wait_secOnds= self._process_jobs() File "/qzdata1/python_env/LazyOps/lib/python2.7/site-packages/apscheduler/schedulers/base.py", line 981, in _process_jobs self.remove_job(job.id, jobstore_alias) File "/qzdata1/python_env/LazyOps/lib/python2.7/site-packages/apscheduler/schedulers/base.py", line 613, in remove_job raise JobLookupError(job_id) JobLookupError: u'No job by the id of mt_ios999game_in_1516005540000 was found' 我把两个 add_job()位置互掉后,即先添加 add_job(func=open_out...) 再添加 add_job(func=open_in..)
然后 open_out 会被执行两次。
这样的问题,我应如何修改。
感觉毫无逻辑出现这问题,一次性任务,会被重复执行,而且是同一时间的。
