def test__task_issue_retry_with_not_throw(self, scoped_app, celery_session_worker): with scoped_app as app: clear_locks(app) @celery_session_worker.app.task(base=Singleton, bind=True) def retry_task_not_throw(self, *args): backend = self.singleton_backend config = self.singleton_config assert len(backend.redis.keys(config.key_prefix + "*")) > 0 if not backend.redis.get(config.key_prefix + "_retry"): backend.redis.incr(config.key_prefix + "_retry", amount=1) self.retry(countdown=1, throw=False) return "from retry" assert len(backend.redis.keys(config.key_prefix + "*")) == 2 backend.redis.incr(config.key_prefix + "_success", amount=1) return "from success" celery_session_worker.reload() task1 = retry_task_not_throw.apply_async(args=[1, 2, 3]) time.sleep(5) # Small delay for on_success # assert task1.get(timeout=10) == "from success" backend = retry_task_not_throw.singleton_backend config = retry_task_not_throw.singleton_config assert backend.redis.get(config.key_prefix + "_retry") == '1' assert backend.redis.get(config.key_prefix + "_success") is None backend.redis.delete(config.key_prefix + "_retry") assert not backend.redis.keys(config.key_prefix + "*") clear_locks(app)
def test__clear_locks(self, scoped_app): with scoped_app as app: @app.task(base=Singleton) def simple_task(*args): return args [simple_task.apply_async(args=[i]) for i in range(5)] clear_locks(app) backend = simple_task.singleton_backend config = simple_task.singleton_config assert not backend.redis.keys(config.key_prefix + "*")
def clear_all_locks(**kwargs): clear_locks(celery_app)
def scoped_app(celery_app): try: yield celery_app finally: clear_locks(celery_app)