我正在尝试在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”)。
所以我有点好奇为什么会这样,我做错了什么。我通常认为自己是一个好的谷歌人,但我找不到任何类似的案例。我的头脑不喜欢你必须使用时间或随机例子的例子。我想我必须看到更多实际的例子。
顺便说一句,在这样的类中放置while循环是“错误的”吗?它应该以某种方式在外面吗?我应该在我的RconProtocol
课程中创建线程吗?
希望这是足够的信息。
提前致谢!
/丹尼尔
答案 0 :(得分:1)
您正在主线程中调用rcon.Rcon协议。替换以下行
th = threading.Thread(target=rcon.RconProtocol(serverAddress, rconPort, rconPass, serverName))
带
th = threading.Thread(target=rcon.RconProtocol, args=(serverAddress, rconPort, rconPass, serverName))
答案 1 :(得分:0)
此外,使用while循环作为线程中的高级控件是个坏主意。 Python线程适用于阻塞大部分时间等待某些事情然后做出反应的情况。在您的情况下,您应该使用threading.Queue
向您的线程发送命令以转发到您的服务器。这样,您的线程将被阻塞,等待队列或向您的服务器发送消息。