【问题标题】:Making Asynchronous Calls Using Twisted Inside a Django Project在 Django 项目中使用 Twisted 进行异步调用
【发布时间】:2015-07-12 05:52:51
【问题描述】:

我有一个接受客户端请求的 Django Web 服务器。另外,我还有另一台服务器,用Twisted写的。我写了一个 Twisted 协议——它的“一半”服务器在服务器上运行,我也有一个非常易于使用的客户端协议。

Django 服务器偶尔会收到需要向 Twisted 服务器发起请求的请求。这显然可能是一个很长的操作,所以它不能是同步的。我无法在 Django 项目中加入 Twisted 客户端来发出这些请求。

稍微简化一下架构,它看起来像这样:

最初,我在我的 Django 项目的 views.py 文件中创建了一个全局线程实例,它运行 Twisted 的反应器循环,每当通过 Django 服务器接收到请求时,我都会将它异步添加到反应器中以执行由那个线程。这适用于 python manage.py runserver 脚本,但是当我在我的 Apache 服务器上运行它时,有时会在 Twisted 服务器上收到请求,有时不会。

我假设这是因为 Apache 还运行多个线程,每个线程都尝试创建该反应器线程。由于每个进程可能只有一个反应器,因此只有一个线程成功而其他线程失败,因此只有一些请求通过 - “获胜”线程中的请求(这只是一个理论,我还没有验证它)。

我相信我的选择是:

  1. 以某种方式在所有 Apache 线程之间共享我的反应器线程实例,这样实际上只有一个反应器。不知道具体怎么做 - 我在网上找到的所有内容都是关于共享数据(通过 Django 的数据库),而不是共享实例。
  2. 在 Django 服务器机器上将 Twisted 客户端作为一个单独的进程运行,并使用一些 RPC 方法从 Django 发送请求(这不是基于 Twisted - 否则我会回到在 Django 中运行 Twisted 客户端的第一方) ,我似乎无法做到……)。

关于什么是正确的解决方案/如何实施它有什么建议吗?还有其他我没有想到的方法吗?

谢谢。

【问题讨论】:

  • 我面临同样的问题。 Crotchet 是否适合您,或者您找到了其他解决方案?

标签: python django asynchronous webserver twisted


【解决方案1】:

使用Crochet

Stack Overflow 认为这个答案不足以解决您的问题,因为字数不够。但是检查一下;钩针编织正是您所需要的。

【讨论】:

  • 谢谢!看起来很有希望。你知道它是否被广泛使用吗? (即它是否经过良好测试?我可以在生产中使用它吗?)
  • 我链接到的首页上有 100% 的测试覆盖率,所以我会说“是”。它是由最初的 Twisted 开发人员之一 Itamar 编写的,所以我很乐意在生产环境中使用它。
猜你喜欢
  • 1970-01-01
  • 2016-07-22
  • 1970-01-01
  • 2019-12-31
  • 1970-01-01
  • 1970-01-01
  • 2020-02-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多