0

同時に2つのクラスを実行する必要があるPythonでプログラムを作成しようとしています。だから私がやろうとしているのは、クラスのすべてのインスタンスに対してスレッドを作成することです。プログラミングは私にとってかなり新しいものなので、これを「ユーザー エラー」と呼んでいます ;)

これが私のコードです:

import threading
import sys

servers = [
    ["Server 01", "192.168.0.1", 12345, "password"],
    ["Server 02", "192.168.0.1", 12346, "password"],
]

def main():
    for row in servers:
        serverName = row[0]
        serverAddress = row[1]
        rconPort = row[2]
        rconPass = row[3]
        th = threading.Thread(target = rcon.RconProtocol(serverAddress, rconPort, rconPass, serverName))
        th.start()

if __name__ == '__main__':
    main()

このコードは、 の最初のサーバーでうまく機能しますservers。しかし、その後停止しth.start()ます。そのため、その後何をしても問題ありth.start()ません。実行されません。RconProtocolソケットをリッスンする以外に特別なことは何もしません。で、ここが問題だと思います。RconProtocolクラス ( )に無限ループがありますwhile True

同様の機能を実行しようとしました(別の呼び出しtwoも行いました):

def one():
    while True:
        print "one"

スレッドのターゲットとして指定しただけで、同じ問題が発生しました。while ループなしで動作します (「one」を表示するだけです)。

ですから、なぜこれが起こっているのか、何が間違っているのか、少し興味があります。私は通常、自分自身を優れた Google 担当者だと思っていますが、同様のケースは見つかりませんでした。私の頭は、時間を使わなければならない例やランダムな例が好きではありません。もっと実用的な例を見る必要があると思います。

ところで、このようなクラスに while ループを配置するのは「間違っている」のでしょうか? なんらかの方法で外にある必要がありますか?RconProtocol代わりに、クラスでスレッドを作成する必要がありますか?

これが十分な情報であることを願っています。

前もって感謝します!

/ダニエル

4

2 に答える 2

1

メインスレッドで rcon.RconProtocol を呼び出しています。次の行を置き換えます

th = threading.Thread(target=rcon.RconProtocol(serverAddress, rconPort, rconPass, serverName))

th = threading.Thread(target=rcon.RconProtocol, args=(serverAddress, rconPort, rconPass, serverName))
于 2013-07-25T01:09:17.550 に答える