如何在共享两个线程的值时同时运行它们?

2024-04-25 23:03:32 发布

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

我需要运行两个线程。第一个是传感器,第二个是电机。 我需要以两种不同的延迟时间并行运行这两个线程,并且需要在它们之间进行通信。这是我的试用码。在这里,马达线程只运行一次并打印

这是密码

from queue import Queue
from threading import Thread
import time

def sensor(numbers,q):
    for n in numbers:
        q.put(n*n)
        print (n*n)
        time.sleep(1)  # Add some delay here

def motor():
    a=q.get()
    if (a<10):
        print("good")
        time.sleep(2)  # Add some delay here
    else:
        print ("bad")
        time.sleep(2)  # Add some delay here


if __name__=="__main__":
    numbers = [1,2,3,4,5,6,7,8]
    q= Queue()

    p= Thread(target=sensor , args = (numbers,q))
    r= Thread(target = motor)
    p.start()
    r.start() 

你知道吗` 这是我得到的结果

1
good
4
9
16
25
36
49
64

我需要得到好或坏的评论后,每个数字。你知道吗


Tags: fromimportaddheretimequeuedefsleep
2条回答

我会这样做的。首先,motor任务应该是一个循环,以便在运行时从Queue中检索多个项。为了告诉它何时停止,可以在队列中放入一个特殊值(标记)来指示任务停止(中断循环并退出)。你知道吗

完成之后,您可以通过调用它的join()方法等待它完成。你知道吗

这就是我的意思:

from queue import Queue
from threading import Thread
import time

def sensor(numbers, q):
    for n in numbers:
        q.put(n*n)
        print(n*n)
        time.sleep(1)  # Add some delay here

    q.put(None)  # End marker.

def motor():
    while True:
        a = q.get()
        if a is None:  # End marker?
            break  # Quit.
        if a < 10:
            print("good")
            time.sleep(2)  # Add some delay here
        else:
            print ("bad")
            time.sleep(2)  # Add some delay here


if __name__=="__main__":
    numbers = [1,2,3,4,5,6,7,8]
    q = Queue()

    p = Thread(target=sensor, args=(numbers, q))
    r = Thread(target=motor)
    p.start()
    r.start()
    r.join()  # Wait for consumer thread to finish.
    print('done')

函数motor调用方法q.get(),该方法只从队列中返回一个项,这样它只打印一个结果。你知道吗

您必须遍历队列直到它为空

def motor():
    while not q.empty():
        a=q.get()
        if (a<10):
            print("good")
            ...

相关问题 更多 >