how to give a custom celery state when it retries





.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty{ height:90px;width:728px;box-sizing:border-box;
}







0















I have the following celery task and I wanted know how the change the default status when the task retries. I am aware to change the state you would normally give the following line self.update_state(state='MY CUSTOM STATE') however there seems to be something different when the code retries. In the end I would like to change the retry state from RETRY to WAITING.



LOCK_EXPIRE = 60 * 2  # Lock expires in 2 minutes


@contextmanager
def memcache_lock(lock_id, oid):
timeout_at = monotonic() + LOCK_EXPIRE - 3
print('in memcache_lock and timeout_at is {}'.format(timeout_at))
# cache.add fails if the key already exists
status = cache.add(lock_id, oid, LOCK_EXPIRE)
try:
yield status
print('memcache_lock and status is {}'.format(status))
finally:
# memcache delete is very slow, but we have to use it to take
# advantage of using add() for atomic locking
if monotonic() < timeout_at and status:
# don't release the lock if we exceeded the timeout
# to lessen the chance of releasing an expired lock
# owned by someone else
# also don't release the lock if we didn't acquire it
cache.delete(lock_id)



@celery.task(bind=True, name='app.myTask1')
def myTask1(self):

self.update_state(state='IN TASK')
print('dir is {} '.format(dir(self)))

lock_id = self.name
print('lock_id is {}'.format(lock_id))

with memcache_lock(lock_id, self.app.oid) as acquired:
print('in memcache_lock and lock_id is {} self.app.oid is {} and acquired is {}'.format(lock_id, self.app.oid, acquired))
if acquired:
# do work if we got the lock
print('acquired is {}'.format(acquired))
self.update_state(state='DOING WORK')
time.sleep(90)
return 'result'

# otherwise, the lock was already in use
raise self.retry(countdown=60) # redeliver message to the queue, so the work can be done later









share|improve this question





























    0















    I have the following celery task and I wanted know how the change the default status when the task retries. I am aware to change the state you would normally give the following line self.update_state(state='MY CUSTOM STATE') however there seems to be something different when the code retries. In the end I would like to change the retry state from RETRY to WAITING.



    LOCK_EXPIRE = 60 * 2  # Lock expires in 2 minutes


    @contextmanager
    def memcache_lock(lock_id, oid):
    timeout_at = monotonic() + LOCK_EXPIRE - 3
    print('in memcache_lock and timeout_at is {}'.format(timeout_at))
    # cache.add fails if the key already exists
    status = cache.add(lock_id, oid, LOCK_EXPIRE)
    try:
    yield status
    print('memcache_lock and status is {}'.format(status))
    finally:
    # memcache delete is very slow, but we have to use it to take
    # advantage of using add() for atomic locking
    if monotonic() < timeout_at and status:
    # don't release the lock if we exceeded the timeout
    # to lessen the chance of releasing an expired lock
    # owned by someone else
    # also don't release the lock if we didn't acquire it
    cache.delete(lock_id)



    @celery.task(bind=True, name='app.myTask1')
    def myTask1(self):

    self.update_state(state='IN TASK')
    print('dir is {} '.format(dir(self)))

    lock_id = self.name
    print('lock_id is {}'.format(lock_id))

    with memcache_lock(lock_id, self.app.oid) as acquired:
    print('in memcache_lock and lock_id is {} self.app.oid is {} and acquired is {}'.format(lock_id, self.app.oid, acquired))
    if acquired:
    # do work if we got the lock
    print('acquired is {}'.format(acquired))
    self.update_state(state='DOING WORK')
    time.sleep(90)
    return 'result'

    # otherwise, the lock was already in use
    raise self.retry(countdown=60) # redeliver message to the queue, so the work can be done later









    share|improve this question

























      0












      0








      0








      I have the following celery task and I wanted know how the change the default status when the task retries. I am aware to change the state you would normally give the following line self.update_state(state='MY CUSTOM STATE') however there seems to be something different when the code retries. In the end I would like to change the retry state from RETRY to WAITING.



      LOCK_EXPIRE = 60 * 2  # Lock expires in 2 minutes


      @contextmanager
      def memcache_lock(lock_id, oid):
      timeout_at = monotonic() + LOCK_EXPIRE - 3
      print('in memcache_lock and timeout_at is {}'.format(timeout_at))
      # cache.add fails if the key already exists
      status = cache.add(lock_id, oid, LOCK_EXPIRE)
      try:
      yield status
      print('memcache_lock and status is {}'.format(status))
      finally:
      # memcache delete is very slow, but we have to use it to take
      # advantage of using add() for atomic locking
      if monotonic() < timeout_at and status:
      # don't release the lock if we exceeded the timeout
      # to lessen the chance of releasing an expired lock
      # owned by someone else
      # also don't release the lock if we didn't acquire it
      cache.delete(lock_id)



      @celery.task(bind=True, name='app.myTask1')
      def myTask1(self):

      self.update_state(state='IN TASK')
      print('dir is {} '.format(dir(self)))

      lock_id = self.name
      print('lock_id is {}'.format(lock_id))

      with memcache_lock(lock_id, self.app.oid) as acquired:
      print('in memcache_lock and lock_id is {} self.app.oid is {} and acquired is {}'.format(lock_id, self.app.oid, acquired))
      if acquired:
      # do work if we got the lock
      print('acquired is {}'.format(acquired))
      self.update_state(state='DOING WORK')
      time.sleep(90)
      return 'result'

      # otherwise, the lock was already in use
      raise self.retry(countdown=60) # redeliver message to the queue, so the work can be done later









      share|improve this question














      I have the following celery task and I wanted know how the change the default status when the task retries. I am aware to change the state you would normally give the following line self.update_state(state='MY CUSTOM STATE') however there seems to be something different when the code retries. In the end I would like to change the retry state from RETRY to WAITING.



      LOCK_EXPIRE = 60 * 2  # Lock expires in 2 minutes


      @contextmanager
      def memcache_lock(lock_id, oid):
      timeout_at = monotonic() + LOCK_EXPIRE - 3
      print('in memcache_lock and timeout_at is {}'.format(timeout_at))
      # cache.add fails if the key already exists
      status = cache.add(lock_id, oid, LOCK_EXPIRE)
      try:
      yield status
      print('memcache_lock and status is {}'.format(status))
      finally:
      # memcache delete is very slow, but we have to use it to take
      # advantage of using add() for atomic locking
      if monotonic() < timeout_at and status:
      # don't release the lock if we exceeded the timeout
      # to lessen the chance of releasing an expired lock
      # owned by someone else
      # also don't release the lock if we didn't acquire it
      cache.delete(lock_id)



      @celery.task(bind=True, name='app.myTask1')
      def myTask1(self):

      self.update_state(state='IN TASK')
      print('dir is {} '.format(dir(self)))

      lock_id = self.name
      print('lock_id is {}'.format(lock_id))

      with memcache_lock(lock_id, self.app.oid) as acquired:
      print('in memcache_lock and lock_id is {} self.app.oid is {} and acquired is {}'.format(lock_id, self.app.oid, acquired))
      if acquired:
      # do work if we got the lock
      print('acquired is {}'.format(acquired))
      self.update_state(state='DOING WORK')
      time.sleep(90)
      return 'result'

      # otherwise, the lock was already in use
      raise self.retry(countdown=60) # redeliver message to the queue, so the work can be done later






      python celery django-celery celery-task






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Jan 4 at 2:42









      MattMatt

      3082625




      3082625
























          0






          active

          oldest

          votes












          Your Answer






          StackExchange.ifUsing("editor", function () {
          StackExchange.using("externalEditor", function () {
          StackExchange.using("snippets", function () {
          StackExchange.snippets.init();
          });
          });
          }, "code-snippets");

          StackExchange.ready(function() {
          var channelOptions = {
          tags: "".split(" "),
          id: "1"
          };
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function() {
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled) {
          StackExchange.using("snippets", function() {
          createEditor();
          });
          }
          else {
          createEditor();
          }
          });

          function createEditor() {
          StackExchange.prepareEditor({
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: true,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: 10,
          bindNavPrevention: true,
          postfix: "",
          imageUploader: {
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          },
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          });


          }
          });














          draft saved

          draft discarded


















          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54032505%2fhow-to-give-a-custom-celery-state-when-it-retries%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown

























          0






          active

          oldest

          votes








          0






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes
















          draft saved

          draft discarded




















































          Thanks for contributing an answer to Stack Overflow!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54032505%2fhow-to-give-a-custom-celery-state-when-it-retries%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          Monofisismo

          Angular Downloading a file using contenturl with Basic Authentication

          Olmecas