代码如下:
for _i in range(8): t = threading.Thread(target=main,args=(clienLog,)) t.setDaemon(True) t.start() t.join()
这是因为对join理解有偏差的原因导致的,join ()方法:主线程A中,创建了子线程B,并且在主线程A中调用了B.join(),那么,主线程A会在调用的地方等待,直到子线程B完成操作后,才可以接着往下执行,那么在调用这个线程时可以使用被调用线程的join方法
因此启动第一线程后会在主线程中等待第一个线程完成才会往后执行,这样的话这个多线程就变成了单线程
应该写成
ts = [] for _i in range(8): t = threading.Thread(target=main,args=(clienLog,)) ts.append(t) t.setDaemon(True) t.start() for t in ts: t.join()
如果线程中有while Ture的循环的时候无法ctrl+c退出程序,
可以写成下面这样:
try: for _i in range(8): t = threading.Thread(target=main,args=(clienLog,)) t.setDaemon(True) t.start() #t.join() while True: time.sleep(5) except KeyboardInterrupt: print('quit')
也可以将两者结合,没有对比sleep和join哪个性能更优