当前位置: 首页 > 面试题库 >

有什么方法可以从Python [Django]进行异步函数调用吗?

岳出野
2023-03-14
问题内容

我正在创建一个Django应用程序,它对上传的文件进行各种长时间的计算。我不想让用户等待文件被处理-
我只想向用户显示一个页面,上面显示的内容类似于“正在解析文件”。

如何从视图进行异步函数调用?

可能看起来像这样:

def view(request):
    ...
    if form.is_valid():
        form.save()
        async_call(handle_file)
    return render_to_response(...)

问题答案:

建议不要将其完全分开,而不是尝试通过子进程或线程来管理。有两种方法:第一种是在数据库表中的某个位置设置标志,并使cron作业定期运行以检查该标志并执行所需的操作。

第二种选择是使用消息队列。您的文件上传过程会在队列上发送一条消息,然后一个单独的侦听器会收到该消息并执行所需的操作。我已经使用RabbitMQ进行了这种处理,但其他方法也可用。

无论哪种方式,您的用户都不必等待流程完成,也不必担心管理子流程。



 类似资料:
  • 问题内容: 我想知道是否可以实现任何其他优化来提高Java中反射调用的速度。并不是说性能会令人望而却步,而是当我想到我正在编写的某个库中的某些代码是在某个地方的紧密循环中实现时,我会大为惊讶。 考虑一种实用方法来进行反射性调用: 基本操作是 作为性能优化,我使用目标对象的类,方法名称和签名(其代码可能需要一些改进)的哈希值来缓存该方法,但是除此之外,我还能做其他事情吗?我听说过一些有关 Invok

  • 是否可以调用一个异步方法,以便它从一个同步的方法异步运行?我不关心它挂起同步调用程序直到它返回,而是希望该方法被异步调用。

  • 问题内容: 我想在每次执行Flask路由时执行一个异步函数。为什么函数从不执行? 我还尝试将阻塞调用放在单独的线程中。但是它仍然没有调用该函数。 问题答案: 你可以将一些异步功能整合到Flask应用中,而不必完全将其转换为异步。 这将阻止Flask响应,直到异步函数返回为止,但是它仍然允许你做一些聪明的事情。我已经使用此模式使用aiohttp并行执行许多外部请求,然后在完成它们之后,我回到传统的f

  • 问题内容: 我有一个使用XML和反射将 s 返回到另一个类的类。 通常,这些对象是外部对象的子字段,但有时我想即时生成它。我已经尝试过类似的方法,但无济于事。我相信这是因为Java不允许你访问进行反射的方法。 如果提供的方法失败,则失败。我可以通过制作方法来解决它,或者制作另一个类来派生它。 长话短说,我只是想知道是否存在一种通过反射访问方法的方法。 问题答案: 你可以使用反射调用私有方法。修改已

  • 我正试图从同步方法运行异步方法。但是我不能等待异步方法,因为我在同步方法中。我一定不理解TPL,因为这是我第一次使用它。 每个方法都需要前一个方法来完成,因为第一个方法的数据用于第二个方法。 Await运算符只能在异步方法中使用。考虑用'async'修饰符标记此方法,并将其返回类型更改为'task' 但是,如果我使用async修饰符,这将是一个异步操作。因此,如果我对的调用没有使用await运算符

  • 问题内容: 我不应该能够调用实例化对象的私有方法。我想知道为什么下面的代码有效。 我知道可以从类中访问私有方法。但是,如果类中的方法实例化了同一类的对象,则作用域规则是否不适用于该实例化的对象? 如本例所示,像main这样的静态方法可以访问类的非静态成员吗​​? 问题答案: 您的方法是的方法,因此可以调用的私有方法。 只是因为它是一个方法并不妨碍它表现得像为目的的方法,等等。 只是阻止的方法 等

  • 我基本上理解检查异常的潜在问题,以及Kotlin为什么省略它们。然而,我遇到的问题是,我找不到任何简单的方法来清楚地向调用方指示函数可能抛出的异常。 我在Python中遇到过无数次这个问题,我的程序在运行几个月后会崩溃,因为我没有意识到我正在使用的某个库中的一个函数会引发一个特殊的异常。尽管被迫捕获异常可能会有相当大的问题,但清楚地看到函数可能抛出的所有潜在异常还是不错的。 那么回到问题上来,有没