【问题标题】:Python: how to stall execution of function until two threads completePython:如何暂停函数的执行,直到两个线程完成
【发布时间】:2016-10-18 22:33:20
【问题描述】:

我对 python 编程还很陌生,并且第一次开始涉足并发,所以请原谅任何条款。

我的程序启动了两个线程,每个线程都调用一个函数“lightshow()”,但不是程序在两个线程都完成之前暂停它的执行,而是转到代码中的下一行。

是否可以“暂停”程序直到两个线程都完成?

下面是我的代码sn-p:

import time
import threading
from threading import Thread

# Handshake pulse on GPIO2 of 4 50ms highs

def setup():
        for pulse in range(5):
                hs.on()
                sleep(0.05)
                hs.off()
                sleep(0.05)
        print('handshake comlete')

def lightshow(sequence, relay):
        t_end = time.time() + 60*1
        while time.time() < t_end:
                print('starting timer')
                # iterate over the dictionary's keys and values 
                for key, value in sequence.items():
                        relay.on()
                        sleep(key)
                        relay.off()
                        sleep(value)



setup() #send handshake to board to prime it.


t1 = threading.Thread(target = lightshow, args=(flickerRGB, relay1))
t2 = threading.Thread(target = lightshow, args=(flickerWhite, relay2))

t1.start()
t2.start()

#send handshake to Relay board to reset it
setup()

基本上,该程序同时切换两个继电器以打开具有不同开/关模式的灯。

如果有比线程更好的方法,请告诉我。

非常感谢,

保罗

【问题讨论】:

  • 你不想在两个线程之前做设置吗?
  • 是的,setup() 向继电器板发送一个脉冲序列以启动它,以便可以访问继电器,还在程序结束时调用 setup() 来重置继电器板。

标签: python multithreading python-multithreading


【解决方案1】:
#send handshake to Relay board to reset it
t2.join() #block until thread exits
setup()

但既然它只是一个硬编码的超时,为什么不只是

time.sleep(61)

【讨论】:

  • 您好乔兰,感谢您的帮助。我理解第一个答案,但不遵循“但因为它只是一个硬编码的超时,为什么不只是 time.sleep(61)”你能为新手解释一下吗?
  • @Tullio_IRL - 两个线程都在运行一个 while 循环,该循环将在 60 秒后完成。因此,可以假设两个线程都在 61 秒标记之前完成。
  • 好的,我现在明白了,所以在线程开始后添加“time.sleep(61)”,谢谢先生:)
猜你喜欢
  • 2016-09-08
  • 1970-01-01
  • 2021-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多