如何在python中无休止地运行线程



我有两个线程A和B。我希望实现的解决方案是,线程A应该无休止地运行,消耗来自代理的一些事件。线程B必须只有在消耗了特定数量的消息时才被激活,比如说10条。线程A必须无休止地运行消耗消息,线程B必须在线程A获得10条消息并执行一个操作后死亡时激活,然后在下一组10条消息到来时重新启动

def threadA():
#an action
def threadB():
#an action
readThread.start()
sleep(10)
emailThread.start()
readThread.join()
emailThread.join()

通过这种方式,一旦单个循环结束,线程就会结束。而且我没有添加在线程B收到10条消息后启动它的逻辑,这也是我无法实现的部分。

while True:必须存在于线程内部才能无休止地使用它。为了在线程A执行了10次时执行B,必须使用可以在线程之间交换数据的队列或deque。(不建议使用全局变量,建议使用deque而不是队列。(最后,一个线程只能启动一次,所以最好保持运行,除非您声明了一个新线程。因此,线程B还放入while True:。(对于使用while True:无休止运行的线程,始终建议使用daemon=True,以减少内存浪费。(

import threading
from collections import deque
def threadA(dqu):
count = 0
while True:
if count == 10:
dqu.append('do B')
count = 0
#an action
count += 1
def threadB(dqu):
while True:
if dqu:
msg = dqu.popleft()
if msg == 'do B':
#an action
dequeAB = deque()
readThread = threading.Thread(target=threadA, args=(dequeAB,), daemon=True)
emailThread = threading.Thread(target=threadB, args=(dequeAB,), daemon=True)
readThread.start()
emailThread.start()
while True:
pass

最新更新