python二个线程不能同时运行

nihongsheng 2018-03-14 12:06:17
我需要一个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.
...全文
1789 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
nihongsheng 2018-05-15
  • 打赏
  • 举报
回复
已解决。程序可以跑的。可以运行二个线程
nihongsheng 2018-03-15
  • 打赏
  • 举报
回复
Be more specific,please.
oyljerry 2018-03-14
  • 打赏
  • 举报
回复
python的线程有GIL锁等,不能真正的同时运行两个线程,一般用多进程的方式来解决

37,719

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧