zoukankan      html  css  js  c++  java
  • python threading 无法并行问题

    代码如下:

    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哪个性能更优

  • 相关阅读:
    关于抽象类
    封装.继承.多态
    构造方法
    String
    无参方法与有参方法
    类和对象
    使用分层实现业务处理(二)
    使用分层实现业务处理(一)
    序列化Serializable接口
    用JSP从数据库中读取图片并显示在网页上
  • 原文地址:https://www.cnblogs.com/leescre/p/10147355.html
Copyright © 2011-2022 走看看