【问题标题】:How can I have a python module run asynchronously and recieve calls from other modules?如何让 python 模块异步运行并接收来自其他模块的调用?
【发布时间】:2013-01-30 16:30:59
【问题描述】:

所以我目前正在向 Django 项目添加推荐引擎,并且需要为我的一个视图函数做一些繁重的处理(在外部模块中)。这显着减慢了页面加载时间,因为我必须加载一些数据,对其进行转换,根据请求发送的参数执行我的计算,然后将建议返回给视图。每次加载视图时都必须这样做。

我想知道是否有某种方法可以让推荐模块加载并转换内存中的数据,然后等待从视图中发送参数,对这些参数进行计算,然后将其发送回看法。

任何帮助将不胜感激。

【问题讨论】:

  • 您基本上需要一个视图上的监听器,它可以接收来自您的外部模块的消息。完成后,让外部模块在某处独立设置标志,例如数据库字段。您的视图可以定期轮询数据库以了解后端处理是否完成。
  • 这似乎有点矫枉过正,因为实际处理本身是该过程中计算密集度最低的部分。不过感谢您的建议。
  • 啊——这就是我的想法适合的特殊情况。

标签: python django asynchronous process


【解决方案1】:

Celery 是一个非常擅长这类事情的任务队列。

它将允许您执行以下操作:

  1. 用户请求查看
  2. view 启动一个异步任务来完成繁重的工作,然后立即返回给用户
  3. 您可以从 javascript 轮询以查看您的任务是否已完成并在完成时加载结果

可能不是您正在寻找的流程,但 celery 绝对值得一试 Celery 也有一个很棒的django package,非常好用

重读您的问题,我认为也可以围绕您的推荐引擎创建本地网络服务。在启动时它可以将所有数据加载到内存中,然后您可以从您的 django 应用程序向它发出请求?

【讨论】:

  • 网络服务的想法听起来不错,但我不知道我是否想走那条路。我希望有某种可以用于此的消息传递功能。还是谢谢
  • 我决定使用 web 服务实现。对于可能遇到此问题的其他任何人,创建一个简单的服务器-客户端关系 xmlrpc 服务器相当简单。我必须对 xmlrpclib 的 python 文档中提供的示例进行最小的修改。只需确保视图(客户端)在 try: except 子句中有其代码。您不希望整个页面因超时或套接字错误而崩溃。
猜你喜欢
  • 2012-04-12
  • 1970-01-01
  • 1970-01-01
  • 2016-07-17
  • 1970-01-01
  • 2019-11-19
  • 1970-01-01
  • 1970-01-01
  • 2016-03-29
相关资源
最近更新 更多