【发布时间】:2014-05-27 19:39:31
【问题描述】:
只有当我使用 client1 = HTTPClient('192.168.1.2', '3') 时它才有效,但当我同时使用以下两种时: client1 = HTTPClient('192.168.1.2', '3') client2 = HTTPClient('192.168.1.3', '3')
然后整个事情变得非常缓慢,有时其中一个会失败。如何确保client1和client2连接+发送+足够快?
import asyncore, socket
class HTTPClient(asyncore.dispatcher):
def __init__(self, host, path):
asyncore.dispatcher.__init__(self)
self.create_socket(socket.AF_INET, socket.SOCK_STREAM)
self.settimeout(10)
try:
self.connect( (host, 8888) )
except:
print 'unable to connect'
pass
self.buffer = path
def handle_connect(self):
pass
def handle_close(self):
self.close()
def handle_read(self):
print self.recv(8192)
def writable(self):
return (len(self.buffer) > 0)
def handle_write(self):
sent = self.send(self.buffer)
self.buffer = self.buffer[sent:]
client1 = HTTPClient('192.168.1.2', '3')
client2 = HTTPClient('192.168.1.3', '3')
asyncore.loop()
编辑:也尝试了线程,但结果相同
import asyncore, socket
import threading
import os
class HTTPClient(asyncore.dispatcher):
def __init__(self, host, path):
asyncore.dispatcher.__init__(self)
self.create_socket(socket.AF_INET, socket.SOCK_STREAM)
self.settimeout(10)
try:
self.connect( (host, 8888) )
except:
print 'unable to connect'
pass
self.buffer = path
def handle_connect(self):
pass
def handle_close(self):
self.close()
def handle_read(self):
print self.recv(8192)
def writable(self):
return (len(self.buffer) > 0)
def handle_write(self):
sent = self.send(self.buffer)
self.buffer = self.buffer[sent:]
def t1():
client1 = HTTPClient('192.168.1.161', '3')
def t2():
client2 = HTTPClient('192.168.1.163', '3')
t0 = threading.Thread(target=t1())
t0.start()
t0.join()
t0 = threading.Thread(target=t2())
t0.start()
t0.join()
asyncore.loop()
【问题讨论】:
-
您能否更详细地描述“变得非常缓慢,有时其中一个失败”的意思?它以什么方式失败?
-
当您仅使用 client1 进行连接时,它可以完美运行。但是当您使用客户端 1 和客户端 2 连接时,它需要比正常超时时间更长的时间,因此连接失败并且与单次连接相比,总行程变得异常。
-
不应该是
t0和t1,和t0.start(),t1.start()然后才加入吗?现在,您一个接一个地启动线程,而不是同时启动。 -
YES - 更改 t0 和 t1 是错字。但仍然存在同样的问题,就像没有线程一样。还有更多想法!
-
对于连接呢?现在它看起来像“启动线程 1”,等待它停止“,启动线程 2”,“等待它停止”。如果你不等第一个停止再启动第二个,它就没有机会跑得更快。
标签: python linux sockets python-2.7 ubuntu