如何使此代码与Queue一起工作?

2024-04-25 08:48:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我有点怀疑是否有人能解决我的问题,并创建成功的线程之间的通信。你知道吗

第一个例子,这是它应该如何工作,但工作不好:

import Queue,threading,time

class th(threading.Thread):
    def __init__(self,q):
        threading.Thread.__init__(self)
        self.q = q
        self.t = time

    def run(self):
        for i in range(5):
            self.q.put(i)
            self.t.sleep(0.5) # <----------
        self.q.put('end')

class main(object):
    def __init__(self):
        self.q = Queue.Queue()
        self.thread = th(self.q)
        self.thread.setDaemon(True)
        self.thread.run()
        self.call()
    def call(self):
        while True:
            recv = self.q.get();
            if recv == 'end':
                break
            else:
                print recv

if __name__ == '__main__':
    root = main()
    root.call()

在本例中,所有打印都同时进行: 0,1,2,3,4

第二个例子:

import Queue,threading,time

class th(threading.Thread):
    def __init__(self,q):
        threading.Thread.__init__(self);
        self.q = q
        self.t = time

    def run(self):
        for i in range(5):
            self.q.put(i) # <------ no sleep()
        self.q.put('end')

class main(object):
    def __init__(self):
        self.q = Queue.Queue()
        self.thread = th(self.q)
        self.thread.setDaemon(True)
        self.thread.run()
        self.call()
    def call(self):
        while True:
            recv = self.q.get()
            if recv == 'end':
                break
            else:
                print recv

if __name__ == '__main__':
    root = main()
    root.call()

代码按需要打印 0, 1 2 三 4个

一对一

sleep函数有没有以同样的方式运行?你知道吗


Tags: runselftimequeueputinitmaindef
2条回答

您不希望直接调用线程上的^{}方法。改为调用^{},这将启动子线程,子线程将依次运行run方法。你知道吗

当前代码基本上是单线程的,因为run调用代替父线程中的子线程。子线程从未真正启动!(您还调用了main.call方法两次,我希望它能阻止或引发异常,但这是另一个问题。)

对不起,这是一个非常简单的东西,非常简单,只是需要替换

self.thread.run() 

self.threat.start()

相关问题 更多 >

    热门问题