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