问题标签 [twisted.application]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
791 浏览

python - 等待一个扭曲的服务启动,然后再启动另一个

我编写了一个使用twisted 应用程序框架的代理服务器。它的核心是使用 DHT 来解决问题。DHT 客户端需要几秒钟才能启动,所以我想确保代理只在 DHT 准备好后接受连接。

如何将EntangledDHTTwisted 转换为某种服务,然后再启动CosipProxy服务?扭曲中是否有任何机制可以为我做到这一点?还是我必须添加一个回调来dht.ready创建应用程序的其余部分?谢谢

0 投票
1 回答
2428 浏览

python - 在 PyDev 中运行 Twisted 应用程序

我想使用 Eclipse (3.5.2) PyDev Module (1.6.4) 和 Python (2.6.5) 调试 Twisted Application (10.0.0)。要从命令行运行应用程序,我将指定以下内容:

c:\python26\python c:\python26\scripts\twistd.py -ny mytwistedapp.py

为了使用 PyDev 实现这一点,我创建了一个新的 PyDev 项目并导入了 mytwistedapp.py 和 twistd.py。在项目的运行配置下,我指定 c:\python26\scripts\twistd.py 作为主模块。如果我选择 Run -> Debug Configurations,它会在没有参数的情况下运行 twistd.py(到了一半,对吧?)。如果我尝试将程序参数添加到运行配置 (-ny mytwistedapp.py),它们将由 PyDev 调试器而不是 twistd.py 处理。两个问题:

  1. 将 twistd.py 指定为主模块是正确的方法吗?
  2. 如果是这样,我如何传递给 twistd.py 运行 mytwistedapp.py (-ny mytwistedapp.py) 所需的参数?
0 投票
3 回答
7959 浏览

python - 如何优雅地退出以 twistd 开头的应用程序?

我有一个 jabber 客户端,它正在读取其标准输入并发布 PubSub 消息。如果我在标准输入上得到 EOF,我想终止客户端。

我第一次尝试sys.exit(),但这会导致异常并且客户端不会退出。然后我做了一些搜索,发现我应该打电话reactor.stop(),但我无法完成这项工作。我的客户端中的以下代码:

结果是exceptions.AttributeError: 'module' object has no attribute 'stop'

我需要做什么才能让twistd 关闭我的应用程序并退出?

编辑 2

最初的问题是由一些符号链接弄乱了模块导入引起的。解决该问题后,我得到了一个新异常:

异常发生后,twistd 关闭。我认为这可能是由调用MyClient.loopin引起的MyClient.connectionInitialized。也许我需要把电话推迟到以后?

编辑

这是.tac我的客户的文件

我正在调用

这是 MyClient 的代码:

0 投票
1 回答
563 浏览

twisted - 运行使用 twistd 守护的基于非 Twisted 的 Python 脚本

我正在编写一个由服务器(使用 Twisted)和客户端(没有 Twisted)组成的 Python 程序

服务器部分是使用 Twisted 和 Twisted 的应用程序框架实现的,并使用 Twistd 启动以进行守护。

在不同服务器上运行的客户端是一个简单的 Python 脚本,没有任何 Twisted 内容(也没有特定于应用程序框架的内容)。它也应该作为守护进程运行。仅供参考,这是来源:

现在我想知道我是否也可以使用 Twistd 来守护客户端?因此,我会从客户端创建一个 Twisted-Application。但是我看到的所有关于 Twisted 应用程序的示例都实现了一些 Twisted 互联网服务器的东西(比如在我的情况下是 internet.UDPServer ...),我的客户不使用这些东西。

那么是否可以使用 Twistd 将我的客户端作为守护进程启动,我必须进行哪些更改?我应该重写客户端以充分利用 Twisted 吗?如果是,是否有任何类似的示例如何编写基于 Twisted 的网络客户端?

还是我必须为客户端使用不同的守护程序库?有一个很好的库,但我试图保持一致并为客户端和服务器使用相同的守护进程机制。

0 投票
2 回答
986 浏览

python - 我在 python /twisted 中收到“nonetype”不可迭代错误

我试图理解为什么当我尝试评估单元格的内容时会出现以下错误,某些函数要么没有返回,要么我不明白这些东西是如何工作的。

这是代码的相关部分(我认为): addcallback 中有一个可疑部分(三个参数都不是数据)但在 _success 中(三个除了 self 一个是数据),如果这是问题何时我传递数据?

诚然,这不是自己的作品,我对它知之甚少,而且它已经过时了。这是更多代码: github python文件

[编辑] 这里还有一点:初始化:

这是引擎对象:


[第 2 次编辑] 这是 Enginebus 定义:

编辑:终于解决了:这里是差异:

这里是上下文:github上后端/engine.py的提交差异

0 投票
1 回答
314 浏览

twisted - Twisted:从另一个应用程序守护进程生成一个应用程序守护进程

我有一个由 twistd 启动的 Twisted 应用程序守护进程。该守护进程充当守护进程管理器来管理许多其他 Twisted 应用程序守护进程。我可以通过 TCP 向管理器发送一个“新”命令,并且管理器应该生成(分叉)另一个 Twisted 应用程序守护程序。我的问题是我该怎么做?在 fork 之后,我想我应该停止管理器的反应器循环,关闭打开的文件描述符(日志文件),然后运行新的 Twisted 应用程序守护程序。我想知道如何正确地做这些事情的细节。

0 投票
1 回答
538 浏览

python - 扭曲的多个端口

我正在使用多端口应用程序,我的问题是关于我使用的解码器,让我用代码解释一下

这是我的 tac 文件,我从配置文件中读取我将使用的端口,该配置文件包含用于侦听客户端的端口的部分,还有接收数据的解码器,例如

如您所见,我开始告诉解码器将在配置文件中进行搜索

我的服务器,每次启动连接,服务器必须使用出厂时分配的解码器,

问题是,至少我注意到,总是每次启动一个解码器时,都会启动最后一个解码器,如您所见,在这种情况下,总是使用 gt06,我需要根据端口使用解码器,这是我的日志,你可以注意到在 2013-05-04 11:29:56-0500,用于解码的类发生了变化

0 投票
1 回答
184 浏览

python - osx上缺少python3部分的扭曲模块

我只能在 OSX 上的 python3 中找到扭曲的部分,但在 python2 中完成,

这里缺少一些重要的包,例如

无论是下载完整包还是运行 pip3 都是一样的结果

或者

0 投票
1 回答
186 浏览

twisted - 如何使用 systemd 作为非特权用户部署 Twistd https 应用程序 (.tac)?

我的 https(端口 443)twistd 应用程序(.tac)可以很好地部署为 systemd 服务,但单元文件需要 user:root 来监听/绑定低于 1000 的端口。问题是twistd 也以 user:root 身份运行。

如何侦听/绑定端口 443,然后以非特权用户身份移交给 twistd .tac?

我想遵循“权限分离”最佳实践,并避免使用 setcap 'cap_net_bind_service=+ep' 或端口转发等变通方法,详见此处

我尝试使用带有 .service 单元文件的 Socket Activation 的 systemd。我的 .socket 可以在特权端口 443 上侦听/绑定。并且 .service 文件以非特权用户身份启动了 twistd .tac 应用程序,但是套接字切换不起作用,并且 twistd 以“权限被拒绝”错误退出。搜索后我发现“已知问题:Twisted 不支持在从 systemd 继承的套接字上侦听 SSL 连接”这个Twisted doc的最后一行。我使用 Twisted 18.9.0 ubuntu 18.04。

以下 .service 和 .socket 文件部分成功:

我的 Systemd 服务单元文件:

Systemd 套接字文件 testtls.socket:

0 投票
0 回答
26 浏览

twisted - Twisted 服务与协议工厂有什么关系?

我正在查看提供扭曲集成的示例 pika(RabbitMQ python 库)。(https://github.com/pika/pika/blob/master/examples/twisted_service.py

我发现自己对服务(twisted.application.service.Service)和扭曲的协议/工厂之间的关系感到困惑。大多数扭曲的文档和示例实际上只谈论协议和工厂,这无济于事。

是否有我遗漏的概述显示每个实体之间的关系?

具体来说,在这种情况下我试图回答的问题与示例中的以下代码有关:

这里amqp_service是一个单独的服务(在完整示例中显示),它有自己的协议和协议工厂。当请求进来时amqp.read_messages触发回调。self.task

  1. 我对协议工厂的理解是,协议的副本本质上是为每个连接/客户端创建的。这个对吗?

  2. 鉴于此类是服务而不是协议工厂,如何确保self.task安全运行,因为没有先验保证它是可重入的。

  3. 扭曲反应器会触发多次调用self.task,而前一个仍在执行(如在示例中的 deferLater 内等待)?这对显示的代码安全吗?如果self.task包裹着,那会改变吗defer.inlineCallbacks

  4. 有没有办法重写这段代码,这样这不是问题。我希望能够在不更改底层 PikaProtocol、PikaFactory 和 PikaService 类的情况下做到这一点。例如,通过使用 TestFactory 创建第二个 TestProtocol,并通过调用amqp.read_messages.