首先是可以正常运行的server.py代码:
from socket import *
from threading import *
host = 'localhost'
port = 5555
def server_run():
while True:
s = socket(AF_INET, SOCK_STREAM)
s.bind((host, port))
s.listen()
print("服务器等待连接")
conn, addr = s.accept()
然后是错误的主程序main.py代码:
from server import *
def main():
Thread(target=server_run()).start()
while True:
print("主程序正常运行...")
main()
如果运行主程序,就会导致以下情况:
由于服务器s.accept()方法(该方法可能包含循环等待),期待的运行情况是主程序创建完服务器后,能接着运行自己的代码,而不是等待服务器接收完毕后再运行。
解决方法:
将Thread(target=server_run()).start()
中的括号删除
修改后结果:
此时主程序运行自己代码和服务器等待连接将是同步进行的
此外,不仅限于服务器,当子线程代码含有while循环语句时,该解决方案也适用