Python 线程在多个连接上不起作用
我正在尝试使用多线程从同一代码运行两个tcp客户端。问题是第二个线程从未运行。main()永远不会到达最后一个“It’s here!”字符串打印。我有以下代码:Python 线程在多个连接上不起作用,python,python-2.7,tcp,python-multithreading,Python,Python 2.7,Tcp,Python Multithreading,我正在尝试使用多线程从同一代码运行两个tcp客户端。问题是第二个线程从未运行。main()永远不会到达最后一个“It’s here!”字符串打印。我有以下代码: def main(): t = Thread(None,connect(),None,) t2 = Thread(None,connect2(),None,) t.start() t2.start() print "it's here!" def connect_mktData():
def main():
t = Thread(None,connect(),None,)
t2 = Thread(None,connect2(),None,)
t.start()
t2.start()
print "it's here!"
def connect_mktData():
# create Internet TCP socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# connect to server
s.connect(('IP', PORT))
while(1):
print 'data1'
k = 'enter a letter1:'
s.send(k) # send k to server
v = s.recv(1024) # receive v from server (up to 1024 bytes)
print v
time.sleep(1)
s.close() # close socket
def connect_mktData2():
# create Internet TCP socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# connect to server
s.connect(('IP', PORT))
while(1):
print 'data2'
# get letter
k = raw_input('enter a letter2:')
s.send(k) # send k to server
v = s.recv(1024) # receive v from server (up to 1024 bytes)
print v
time.sleep(1)
s.close() # close socket
main()
我得到以下输出:
data1
enter a letter1:
data1
enter a letter1:
data1
enter a letter1:
data1
enter a letter1:
data1
尽管这两个功能基本相同,但最终我会有两个不同的连接“同时”做两件不同的事情,并相互交替。两个线程不应该独立运行吗?谢谢你的帮助 看来您的问题在于:
t = Thread(None,connect(),None,)
t2 = Thread(None,connect2(),None,)
应该是这样的:
t = Thread(None,connect,None,)
t2 = Thread(None,connect2,None,)
您希望将函数对象connect
和connect2
传递给线程
对象。当您使用connect()
而不是connect
时,您最终会在主线程中调用connect
,然后将其返回值传递给线程
对象,这不是您想要的
另外,创建如下线程对象更具可读性:
t = Thread(target=connect)
t2 = Thread(target=connect2)
使用目标
kwarg,这样就不必为组
包含无
还要注意的是,虽然这将使两个函数同时运行,但它们只有在执行阻塞I/O操作时才能真正同时运行(即在发送
,接收
,或原始输入
)。由于Python的全局Interpeter锁(GIL),一次只能有一个线程执行CPU限制的操作。因此,您的线程最终将混合执行真正的并发(在I/O期间)和协作多任务(在CPU限制的操作期间)。您应该使用模块,而不是线程模块。threading
模块的级别更高,并且具有更好的API。实际上,看起来您可能一直在尝试使用它,因为您的代码显示正在使用的Thread
对象。但它仍然按照我打印的方式运行。