使用面向对象方法的同一类实例的python并发

时间:2014-02-13 04:40:47

标签: python multithreading concurrency multiprocessing

我希望同一个类的两个对象同时运行。类“MyClass”具有将实例连接到类的另一个实例的函数。我还需要跟踪已创建的对象(oList)。我正在尝试的是:

main.py:

from MyClass import MyClass
import time

oList = []

class oCreator1(Thread):
    def __init__(self):
        Thread.__init__(self)
        self.o1 = MyClass()

    def run(self):
        while 1:
            time.sleep(1)
            print "Hi"

    def getO1(self):
        return self.o1

class oCreator2(Thread):
    def __init__(self):
        Thread.__init__(self)
        self.o2 = MyClass()

    def run(self):
        while 1:
            time.sleep(1)
            print "Bye!"

    def getO2(self):
        return self.o2

main():

    threadList = []
    global oList

    oc1 = oCreator1()
    threadList.append(oc1)
    o1 = oc1.getO1()
    oList.append(o1)

    oc2 = oCreator2()
    threadList.append(oc2)
    o2 = oc2.getO2()
    oList.append(o2)

    o1.connToAnotherO(o2)

    print oList

    for t in threadList:
        t.start()
        t.join()

if __name__ == '__main__':
    main()

但唯一印刷的是“嗨”。我真的想知道我做错的事情以及正确的做法。提前谢谢。

1 个答案:

答案 0 :(得分:0)

for t in threadList:
    t.start()
    t.join()

t.join()调用等待线程t完成。这意味着当你启动第一个线程时,等待它在开始第二个线程之前完成,但第一个线程只是永远打印Hi。它永远不会完成。

在所有线程都已启动之前,请勿join或不启动join