私たちはプロジェクトに取り組んでいて、初めて Twisted を使用しています。私たちはどちらも初心者ですが、基本的にファイルごとに 1 つのクラスと関数を使用するのが一般的に良い方法であることを知っています。Twisted では、ツイスト実行のインスタンスを複数持つことはできないため、これを行うことは実際には不可能であることがドキュメントで読み取られました。
ツイストが実行されているかのようにコードを記述してから、ツイストを実行しているファイルですべての関数などを実行しても問題ありませんか?
明確にするために:
ツイストインのインスタンスを実行しているとします
main.py
特定のねじれたプロトコルをインポートする必要があります。
from twisted.internet.protocol import Factory
from twisted.protocols.basic import LineReceiver
from twisted.internet import reactor
from twisted.internet import task
import random
import sqlite3
import string
そして、twisted からインポートしたものからいくつかの関数を使用するクラス (ただし、今は関数とだけ言っておこう) を作成します。たとえば、LineReceiver にはメソッド sendLine があります。
def connectionLost(self, leave):
....
if self.users.has_key(self.name):
message = "%s has disconnected" % (self.name)
del self.users[self.name]
print (message)
for name, protocol in self.users.iteritems():
protocol.sendLine(message)
ツイストからのインポートと同じファイルにある限り、これはすべて問題なく実行されます。なぜなら、私たちが知っていることから、それが物事がどのように行われるかです. たとえば、あるファイルに時間をインポートしてから別のファイルを作成する場合、そこでも時間をインポートする必要があります。
具体的には LineReceiver についてはわかりませんが、reactor の 1 つのインスタンスしか実行できないという印象を受けています。このインスタンスからのメソッド (reactor.callLater など) をプログラム全体で何度も使用しています。
ただし、私たちが遭遇する問題は、整頓の問題です。私たちのプログラムはすぐに 4,000 行を超え、さらに増え続けています。もちろん、これにより、これらすべてのコード行内で何かを探すのに多くの時間が費やされます。なので、基本的にはクラスごとに別のファイルを作りたいと思っています。しかし、各ファイルで twisted が実行されていないため、これが機能するかどうかはわかりません。
または、 sendLine などのメソッドを実行して、各クラスを独自のファイルにコピー/貼り付けてから、ツイストが実行されているメインファイルでそれらをインポート/呼び出すことができますか?