Bienvenue sur IndexError.

Ici vous pouvez poser des questions sur Python et le Framework Django.

Consultez la FAQ pour améliorer vos chances d'avoir des réponses à vos questions.

Python RQ: je n'arrête pas d'avoir des NoSuchJobError sur Heroku. Voici mon code et les logs d'erreur. Une idée ?

+5 votes
scheduler = django_rq.get_scheduler('default')

def reset():
    """Cancel all active jobs"""
    try:
        jobs = scheduler.get_jobs()
        for job in jobs:
            job.cancel()

    except NoSuchJobError:
        pass

def run():
    """Start task schedulers"""
    try:
        for feed in Feed.objects.all():
            scheduler.schedule(
                scheduled_time=datetime.now(),
                func=fetch_and_parse,
                args=[feed],
                interval=1,
                timeout=1800
            )
    except NoSuchJobError:
        reset()
        run()

def fetch_and_parse(feed):
    """Fetch and parse feed"""
    if feed.fetch():
        feed.parse()
    time.sleep(feed.interval-1)

def main():
    reset()
    run()

rqworker.1 | Traceback (most recent call last): 09:36:43 rqworker.1 | File "/app/.heroku/python/lib/python3.4/site-packages/rq/queue.py", line 371, in dequeue_any Exception
rqworker.1 | job = cls.job_class.fetch(job_id, connection=connection)
rqworker.1 | File "/app/.heroku/python/lib/python3.4/site-packages/rq/job.py", line 294, in fetch
rqworker.1 | job.refresh()
rqworker.1 | File "/app/.heroku/python/lib/python3.4/site-packages/rq/job.py", line 396, in refresh
rqworker.1 | raise NoSuchJobError('No such job: {0}'.format(key))
rqworker.1 | rq.exceptions.NoSuchJobError: No such job: b'rq:job:587e4fab-a718-4e75-ae27-bb47c8e73c21'
demandé 2-Aou-2015 par khamaileon (182 points)
edité 2-Aou-2015 par khamaileon

Ton log n'est peut être pas assez verbeux : on ne sait pas a quel endroit çà pète dans ton script.

Essais d'ajouter du log dans tes excepts.

Au pasage, le run() récursif dans le catch me parait un peu brutal ;)

def run():
    """Start task schedulers"""
    try:
        for feed in Feed.objects.all():
            ...
    except NoSuchJobError:
        reset()
        run() # this

Se connecter ou S'inscrire pour répondre à cette question.

...