在子线程中执行socket的读这种阻塞操作,不被主线程等待

在python语言中,启动一个子线程,子线程中调用socket的读操作。我理解socket的读操作是阻塞的,然而,在执行程序后发现主线程并没有等待子线程。

伪代码如下

def start
    // some codes
    print 'hello'
    socket.readline()
    
t = threading.Thread(start)
t.start()
t.join()

print 'server done.'

执行后先输出了'server done.',再输出'hello'。请问为什么主线程没有等待子线程的阻塞操作?

此外,还有一个问题请教,在linux下执行上述代码的脚本'./script.py'后,无法ctrl-c退出脚本,而是被挂起,请问如何退出进程。

阅读 4.7k
1 个回答

1.首先主线程与子线程连在时序上是并行的
2.问题中的主线程与子线程没有访问同一个资源,即产生资源冲突,print访问的是控制台的IO流,socket.readline访问的是对应socket的IO流,并不是同一个资源,因此也不会引发任何问题
3.为什么先输出server done 而不是先输出hello?也许与线程本身的优先级、对应指令消耗的时间有关,但原理上参考第一条,时序上应该是并行的

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题