相关疑难解决方法(0)

检索Celery中队列中的任务列表

如何检索队列中尚未处理的任务列表?

python celery

136
推荐指数
10
解决办法
10万
查看次数

如何从Celery worker中捕获自定义异常,或者阻止它以`celery.backends.base`作为前缀?

我的Celery任务引发了一个自定义异常NonTransientProcessingError,然后被捕获AsyncResult.get().Tasks.py:

class NonTransientProcessingError(Exception):
    pass

@shared_task()
def throw_exception():
    raise NonTransientProcessingError('Error raised by POC model for test purposes')
Run Code Online (Sandbox Code Playgroud)

在Python控制台中:

from my_app.tasks import *
r = throw_exception.apply_async()
try:
    r.get()
except NonTransientProcessingError as e:
    print('caught NonTrans in type specific except clause')
Run Code Online (Sandbox Code Playgroud)

但我的自定义异常是,虽然引发的异常是,所以我的子句失败了.my_app.tasks.NonTransientProcessingErrorAsyncResult.get()celery.backends.base.NonTransientProcessingErrorexcept

Traceback (most recent call last):
  File "<input>", line 4, in <module>
  File "/...venv/lib/python3.5/site-packages/celery/result.py", line 175, in get
    raise meta['result']
celery.backends.base.NonTransientProcessingError: Error raised by POC model for test purposes
Run Code Online (Sandbox Code Playgroud)

如果我在任务中捕获异常,它可以正常工作.只有当异常被提升到.get()调用时才重命名.

如何引发自定义异常并正确捕获? …

python exception-handling exception celery

7
推荐指数
1
解决办法
2412
查看次数

Python asyncio跳过处理直到函数返回

我仍然对asyncio如何工作感到困惑,所以我试图设置一个简单的例子但是无法实现它.

以下示例是一个Web服务器(Quart),它接收生成大型PDF的请求,然后服务器在开始处理PDF之前返回响应,然后开始处理它,并稍后将下载链接发送到电子邮件.

from quart import Quart
import asyncio
import time

app = Quart(__name__)

@app.route('/')
async def pdf():
    t1 = time.time()
    await generatePdf()
    return 'Time to execute : {} seconds'.format(time.time() - t1)

async def generatePdf():
    await asyncio.sleep(5)
    #sync generatepdf
    #send pdf link to email

app.run()
Run Code Online (Sandbox Code Playgroud)

我该怎么做?在上面的例子中,我不希望在返回之前等待5秒.

我甚至不确定asyncio是否是我需要的.

我担心在响应返回后阻止服务器应用程序不是应该做的事情,但也不确定.

此外,pdf库是同步的,但我想这是另一天的问题......

python python-asyncio python-3.7 quart asgi

6
推荐指数
1
解决办法
473
查看次数