【发布时间】:2013-03-04 22:32:01
【问题描述】:
基本上,我的想法是编写某种基本服务器,我可以在其中连接到我的计算机,然后远程运行命令。这似乎不是什么大问题。但后来我有了一个好主意,下一步逻辑上是添加某种线程,这样我就可以产生多个连接。
我读到,由于 GIL,multiprocessing.Process 将是尝试执行此操作的最佳选择。我不完全理解线程,很难找到关于它的好的文档;所以我只是扔东西并试图弄清楚它是如何工作的。
嗯,看来我可能已经接近正确了;但我有一种感觉,我几乎不可能正确地做到这一点。我的程序现在确实允许多个连接,而当我第一次开始使用线程时它没有;但是一旦建立连接,然后建立另一个连接,第一个连接就不再能够向服务器发送命令。如果有人能给我任何帮助,或者指出我需要学习和理解的正确方向,我将不胜感激。
这是我的代码:
class server:
def __init__(self):
self.s = socket.socket()
try:
self.s.bind(("",69696))
self.s.listen(1)
except socket.error,(value,message):
if self.s:
self.s.close()
def connection(self):
while True:
client , address = self.s.accept()
data = client.recv(5)
password = 'hello'
while 1:
if data == password:
subprocess.call('firefox')
client.close()
else:
client.send('wrong password')
data = client.recv(5)
p = Process(target=x.connection())
p.start()
x = server()
if __name__ == '__main':
main()
【问题讨论】:
-
这是在什么平台上运行的? Unix/Linux?还是窗户?
-
PS:如果条件
data == password为真,那么while 1:循环将无限进行。它将继续无限地产生firefox进程。您可能想在client.close()之后添加break -
我主要是在 Linux/Ubuntu 上尝试过,但我也在 VirtualBox Windows 7 上尝试过。
-
是的,我知道,我添加它的原因是为了确保我可以检查我是否因为正确的原因而断开连接。或者好吧,我想断开连接的原因,如果这有意义的话。不过我没想过添加 break,会的。
-
请考虑twistedmatrix.com,以避免解决许多与编写网络应用程序相关的无聊问题。
标签: python multithreading networking process