Python APScheduler не закрывается чисто - PullRequest
0 голосов
/ 02 марта 2019

Я пытаюсь использовать apscheduler для сбора изображений в течение некоторого количества часов, а затем выключить.Следующий код запускается, а затем выключается, но выдает исключение в процессе.Я использую исключение как признак того, что я не выключаю его правильно.

import os
from datetime import datetime
from datetime import timedelta
from apscheduler.schedulers.blocking import BlockingScheduler

def snap_images():
    print('some message')

def end_sequence():
    scheduler.remove_job('snap_images')
    scheduler.shutdown(wait=True)

if __name__ == '__main__':

    end_time = datetime.now() + timedelta(seconds=5)

    # Setup and start the scheduler
    scheduler = BlockingScheduler()
    scheduler.add_job(snap_images, 'interval', seconds=.5, id='snap_images')
    scheduler.add_job(end_sequence,'date',run_date=end_time)

    print('Press Ctrl+{0} to exit'.format('Break' if os.name == 'nt' else 'C'))

    try:
        scheduler.start()
    except (KeyboardInterrupt, SystemExit):
        pass

    print('scheduler is shut down')

Вот вывод:

Press Ctrl+Break to exit 
some message 
some message 
some message 
some message 
some message 
some message 
some message 
some message 
Job "end_sequence (trigger: date[2019-03-04 09:12:42 PST], next run at: 2019-03-04 09:12:42 PST)" raised an exception Traceback (most recent call last):   
File "C:\ProgramData\Anaconda3\lib\site-packages\apscheduler\executors\base.py", line 125, in run_job
            retval = job.func(*job.args, **job.kwargs)   
File "exitAPSched.py", line 12, in end_sequence
            scheduler.shutdown(wait=True)   
File "C:\ProgramData\Anaconda3\lib\site-packages\apscheduler\schedulers\blocking.py", line 22, in shutdown
            super(BlockingScheduler, self).shutdown(wait)   
File "C:\ProgramData\Anaconda3\lib\site-packages\apscheduler\schedulers\base.py", line 187, in shutdown
            executor.shutdown(wait)   
File "C:\ProgramData\Anaconda3\lib\site-packages\apscheduler\executors\pool.py", line 26, in shutdown
            self._pool.shutdown(wait)   File "C:\ProgramData\Anaconda3\lib\concurrent\futures\thread.py", line 152, in shutdown
            t.join()   
File "C:\ProgramData\Anaconda3\lib\threading.py", line 1053, in join
            raise RuntimeError("cannot join current thread") RuntimeError: cannot join current thread 
scheduler is shut down
...