【问题标题】:Celery soft time limit not triggered芹菜软时间限制未触发
【发布时间】:2022-11-16 11:36:52
【问题描述】:

我有一个芹菜任务,软限制为 10,硬限制为 32:

from celery.exceptions import SoftTimeLimitExceeded
from scrapy.crawler import CrawlerProcess
from scrapy.utils.project import get_project_settings

@app.task(bind=True, acks_late=False, time_limit=32, soft_time_limit=10)
def my_task(self, **kwargs):
    try:
       if 'twisted.internet.reactor' in sys.modules:
            del sys.modules['twisted.internet.reactor']
        settings = get_project_settings()
        process = CrawlerProcess(settings)
        process.crawl(**kwargs)
        process.start()

    except SoftTimeLimitExceeded as te:

        print('Time Exceeded...')

上面的代码按预期执行。但是当爬取时间较长,达到软限制时,不会触发异常。继续抓取,然后达到硬限制并抛出此错误:

Traceback (most recent call last):
  File "/usr/local/lib/python3.8/site-packages/billiard/pool.py", line 684, in on_hard_timeout
    raise TimeLimitExceeded(job._timeout)
billiard.exceptions.TimeLimitExceeded: TimeLimitExceeded(32,)

我什至无法从任务内部捕获此错误。作为测试,我用 time.sleep(50) 替换了 process.start() 命令,因此没有开始爬网,但同时出现了很长的延迟:

@app.task(bind=True, acks_late=False, time_limit=32, soft_time_limit=10)
def my_task(self, **kwargs):
    try:
       if 'twisted.internet.reactor' in sys.modules:
            del sys.modules['twisted.internet.reactor']
        settings = get_project_settings()
        process = CrawlerProcess(settings)
        process.crawl(**kwargs)
        time.sleep(50)

    except SoftTimeLimitExceeded as te:
        print('Time Exceeded...') 

然后SoftTimeLimitExceeded被抓住了。为什么会这样?

版本

芹菜==5.2.7

Scrapy==2.6.1

【问题讨论】:

    标签: python exception scrapy celery taskmanager


    【解决方案1】:

    同样的问题发生在我这边。

    我认为最有可能的是脚本中的“SoftTimeLimitExceeded”错误捕获。所以它不会升到外面。

    你可以检查你的脚本中是否有任何异常预期并删除它们或只是替换为小范围异常。

     settings = get_project_settings()
     process = CrawlerProcess(settings)
     process.crawl(**kwargs)
    

    那是我的想法。我试着这样做。如果它在我身边有效,我会继续在这里更新。

    【讨论】:

      猜你喜欢
      • 2017-02-21
      • 1970-01-01
      • 2012-07-25
      • 2011-06-18
      • 1970-01-01
      • 2016-03-23
      • 1970-01-01
      • 2017-06-29
      • 2014-09-07
      相关资源
      最近更新 更多