从线程的每个循环获取返回值

时间:2019-08-21 18:28:59

标签: python multithreading

我有一个带有for循环的线程,我想从每个循环返回值。但是,当我将return放入循环内部时,它将永久中断循环,因此无法获得其他值。

这是我的功能:

def track_duration_count(track_length):
    time.sleep(13.2)
    for i in range(0,track_length):
        timer = str(datetime.timedelta(seconds=i))
        #sys.stdout.write(str(i)+' ')
        #sys.stdout.flush()
        return timer
        print (timer)
        time.sleep(1)
        global stop_thread
        if stop_thread:
             break
    print ("BREAKFREE")

然后我用以下命令调用函数:

_thread.start_new_thread(track_duration_count,(track_length,))

我想将此功能中的timer用于另一个线程。

1 个答案:

答案 0 :(得分:1)

我建议使用队列在线程之间共享数据。将队列传递给函数(它将传递引用而不是队列的副本,这就是Python的工作原理),然后而不是返回,请使用queue.put()方法将计时器放置在队列中。然后,其他线程可以使用queue.get()方法检索该值。

https://docs.python.org/3/library/queue.html

还有没有理由不使用标准threading.Thread类吗?除非您出于某些愚蠢的理由要使用私有方法,否则使用此方法会更安全。