python二个线程不能同时运行
我需要一个python小程序,目的是在服务器上开二个端口,把一个端口收到的数据转到另一个端口去。
程序如下
import socket
import datetime
import threading
HOST='127.0.0.1'
PORT1=3506
PORT2=3606
global conn1,conn2
def BiServer1():
global addr1
global bb1
s1=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s1.bind((HOST,PORT1))
s1.listen(1)
conn1,addr1=s1.accept()
while True:
dt1=datetime.datetime.now()
data1 = conn1.recv(1024)
if not data1:
bb1=1
else:
print addr1,
print str(dt1),
print ' Received:',
for c in data1:
print "%#2x" % ord(c),
print ''
#if not conn2:
#conn2.send(data1)
conn1.close()
s1.close()
def BiServer2():
global addr2
global bb2
s2=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s2.bind((HOST,PORT2))
s2.listen(1)
conn2,addr2=s2.accept()
while True:
dt2=datetime.datetime.now()
data2 = conn2.recv(1024)
if not data2:
bb2=1
else:
print addr2,
print str(dt2),
print ' Received:',
for c in data2:
print "%#2x" % ord(c),
print ''
#if not conn1:
#conn1.send(data2)
conn2.close()
s2.close()
if __name__ == '__main__':
print('thread %s is running...' % threading.current_thread().name)
thread_list=[]
t1 = threading.Thread(target=BiServer1)
t2 = threading.Thread(target=BiServer2)
thread_list.append(t1)
thread_list.append(t2)
for t in thread_list:
#t.setDaemon(True)
t.start()
现问题是:
1。程序运行到 conn1,addr1=s1.accept() 和 conn1,addr1=s1.accept() 会阻塞住,不会运行第二个线程。以致于如果外部要连接第二个端口时,报错
2。如果第二个端口未运行,由于conn2未初始化,if not conn2: #conn2.send(data1) 会进行不了。而且if not conn2: 这种判断方法有问题,不能判断
请各位大神帮助一下,实在折腾不起了。刚刚开始看python.