标签: twistd

扭曲插件和扭曲服务之间有什么区别?

显然,您可以通过两种不同的方式创建以Twisted方式运行的服务.一方面,您可以使用Twisted Application Infrastructure创建服务,另一方面,您可以使用Twisted Plugin System创建服务.看起来除了在命令行上启动应用程序的方式有些不同,以及编写实际服务的方法之外,它们有两种方法可以完成同样的事情?

python twisted twistd

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

用Pypy跑来跑去

我正在尝试Pypy因为它在CPython上显示出令人印象深刻的基准.另外,我主要在代码中使用Twisted库.我现在可以运行一个使用Twisted reactor的基准脚本,所以我猜我的设置很好.但是,我不知道如何使用Pypy运行Twisted daemonizer(twistd).

pypy twisted twistd

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

使用 pyinstaller 打包一个 twind 插件

我创建了一个很好的 python Twisted 应用程序,其中包含一个用于 Twisted 运行器的插件,如 Twisted 文档中所述:http : //twistedmatrix.com/documents/current/core/howto/tap.html。我在使用 PyInstaller 打包时遇到问题:在执行冻结的应用程序期间找不到我的 twistd 插件。

为了发布我的项目,我使用twisd runner 模块创建了我自己的顶级启动脚本,例如

#!/usr/bin/env python
from twisted.scripts.twistd import run
from sys import argv
argv[1:] = [
  '--pidfile', '/var/run/myapp.pid',
  '--logfile', '/var/run/myapp.log',
  'myapp_plugin'
]
run()
Run Code Online (Sandbox Code Playgroud)

接下来,我使用 PyInstaller 将其冻结为单个目录部署。执行上面的冻结脚本失败,因为它找不到我的扭曲插件(为简洁而编辑):

~/pyinstall/dist/bin/mystartup?16632/twisted/python/modules.py:758:
UserWarning: ~/pyinstall/dist/mystartup?16632 (for module twisted.plugins)
not in path importer cache (PEP 302 violation - check your local configuration).

~/pyinstall/dist/bin/mystartup: Unknown command: myapp_plugin
Run Code Online (Sandbox Code Playgroud)

通常,Twistd 会检查 Python 系统路径以在 twined/plugins/myapp_plugin.py 中发现我的插件。如果我在启动脚本中打印了 twind 插件列表,则该列表在 PyInstaller 生成的可执行文件中为空,例如

from twisted.plugin import IPlugin, getPlugins …
Run Code Online (Sandbox Code Playgroud)

python twisted pyinstaller twistd

5
推荐指数
1
解决办法
1246
查看次数

扭曲的脚本问题

我在应用程序bin部署/usr/bin期间编写了一个Twisted 文件,基于AxiomStackOverflow 上其他地方提供的示例(我不记得在哪里),可以在这里找到项目.

我的问题是,在此python setup.py install过程中,安装的bin文件与Axiom包中的文件不同:

在/ usr/bin中/不言自明

#!/code/venv/bin/python
from axiom.scripts import axiomatic
axiomatic.main()
Run Code Online (Sandbox Code Playgroud)

在/ usr/bin中/ MYAPP

#!/code/venv/bin/python
# EASY-INSTALL-DEV-SCRIPT: 'MyApp==0.0.1','myapp'
__requires__ = 'MyApp==0.0.1'
__import__('pkg_resources').require('MyApp==0.0.1')
exec(compile(open(__file__).read(), __file__, 'exec'))
Run Code Online (Sandbox Code Playgroud)

从bash shell调用后者时后者不起作用: myapp start

我收到以下错误: unknow command myapp

如果我使用python setup.py develop而不是python setup.py install一切顺利.


我已经设置了一个小测试应用程序,它在端口1234上启动tcp服务:

  • 该命令twistd finger 有效,服务启动
  • 命令fingerize start(故意使用不同的名称,以确保不会调用错误的名称)不起作用

这是代码:

斌/ fingerize

#!/usr/bin/python
from finger import tap
tap.main()
Run Code Online (Sandbox Code Playgroud)

扭转/插件/ finger_plugin.py

from twisted.application.service import …
Run Code Online (Sandbox Code Playgroud)

python twisted twistd

5
推荐指数
1
解决办法
410
查看次数

`import _preamble`在Python中做什么?

我在Twisted的twistd.py脚本顶部注意到以下内容:

import os, sys

try:
    import _preamble
except ImportError:
    sys.exc_clear()

sys.path.insert(0, os.path.abspath(os.getcwd()))
Run Code Online (Sandbox Code Playgroud)

怎么import _preamble办?我似乎无法在google-mage上找到它的任何引用.

python import twisted twistd

4
推荐指数
1
解决办法
1491
查看次数

Twisted:禁用Twisted-framework类的日志记录

我的基于Twisted的客户端在循环中发送UDP数据包.因此我使用的是DatagramProtocol类.这是来源:

#!/usr/bin/python
# -*- coding: utf-8 -*-
from twisted.application.service import Service
from twisted.internet import reactor
from twisted.internet.task import LoopingCall
from twisted.internet.protocol import DatagramProtocol
from twisted.python import log
import logging

class HeartbeatClient(Service):
    def __init__(self, host, port, data, beat_period):
        self.ip = host
        self.port = int(port)
        self.data = data
        self.beat = int(beat_period)

    def startService(self):
        self._call = LoopingCall(self._heartbeat)
        self._call.start(self.beat)

    def stopService(self):
        self._call.stop()

    def _heartbeat(self):
        protocol = DatagramProtocol()
        protocol.noisy = False
        port = reactor.listenUDP(0, protocol)
        port.write(self.data, (self.ip, self.port))
        port.stopListening()
Run Code Online (Sandbox Code Playgroud)

现在当我用twistd运行这个客户端时,我永久地从Twisted类中获取日志消息,即从类DatagramProtocol获取:

2011-09-11 18:39:25+0200 [-] (Port 55681 …
Run Code Online (Sandbox Code Playgroud)

python logging twisted twistd

3
推荐指数
1
解决办法
1738
查看次数

检查是否已成功启动使用twistd启动的Twisted Server

我需要一种可靠的方法来检查通过twistd(和TAC文件)启动的基于Twisted的服务器是否已成功启动.它可能会失败,因为某些网络选项设置错误.由于我无法访问twistd日志(因为它记录到/ dev/null,因为我不需要log-clutter twistd产生),我需要找出服务器是否在启动脚本中成功启动了扭曲的电话.

launch-script是一个像这样的Bash脚本:

#!/usr/bin/bash
twistd \
  --pidfile "myservice.pid" \
  --logfile "/dev/null" \
  --python \
  myservice.tac
Run Code Online (Sandbox Code Playgroud)

我在网上找到的只是使用ps或类似东西的一些黑客.但我不喜欢这样的方法,因为我觉得它不可靠.

所以我在考虑是否有办法访问Twisted的内部,并获得所有当前正在运行的Twisted应用程序?这样我就可以在当前运行的应用程序中查询我的Twisted应用程序的名称(正如我在TAC文件中命名的那样)来启动.

我也在考虑不使用扭曲的可执行文件,而是实现基于Python的启动脚本,其中包含了扭曲的内容,就像这个问题的答案所提供的那样,但我不知道这是否有助于我获得状态服务器运行.

所以我的问题就是:是否有一种可靠的非丑陋的方式来判断Twisted Server启动时是否已成功启动了twistd,当禁用了twistd-logging时?

python twisted twistd

3
推荐指数
1
解决办法
629
查看次数

扭曲.如何为每个请求的日志写一个唯一的前缀

我有扭曲的服务器.它与插件一起运行.我想根据请求为每个条目写独特的前缀.

这意味着当user1发出请求时,它将生成一个唯一的字符串,该字符串将以日志记录为前缀(仅适用于此请求).当user2发出请求时,它将成为日志记录的另一个唯一前缀.

我认为它应该是log observer logger,但是如何在用户请求之间分组记录?

logging twisted twistd

2
推荐指数
1
解决办法
1147
查看次数

使用扭曲的 Flask 部署

在flask doco 中,显示了在twisd 下部署flask 应用程序的以下描述。

twistd web --wsgi myproject.app
Run Code Online (Sandbox Code Playgroud)

我有一个看起来像这样的 foo.py

from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello, World!'

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=8080)
Run Code Online (Sandbox Code Playgroud)

所以我希望能够像这样在扭曲下运行

twistd web --wsgi foo.app
Run Code Online (Sandbox Code Playgroud)

但twisdd 不喜欢那样(只是吐出帮助文本)。

我究竟做错了什么 ?

顺便说一句,万一我在 virtualenv 中运行它(我已经安装了flask和twisted)和当前目录,当我发出twisd命令包含 foo.py 。


编辑:我使用的扭曲版本是 18.7.0

我没有注意到(直到 Peter Gibson 的评论提示)在帮助文本出现后会出现消息“No such WSGI application:'foo.app'”。

python wsgi flask twistd

2
推荐指数
1
解决办法
431
查看次数

标签 统计

twistd ×9

twisted ×8

python ×7

logging ×2

flask ×1

import ×1

pyinstaller ×1

pypy ×1

wsgi ×1