我需要运行两个线程。第一个是传感器,第二个是电动机。 我需要以两个不同的延迟时间并行运行这两个线程,并且需要在它们之间进行通信。这是我的尝试代码。在这里,马达线仅运行一次并打印
这是代码
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
每个数字后我都需要发表好或不好的评论。
答案 0 :(得分:1)
这就是我要做的。首先,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')
答案 1 :(得分:0)
函数motor
调用方法q.get()
,该方法仅从队列中返回一项,因此正常情况下它仅输出一项结果。
您必须遍历队列直到队列为空
def motor():
while not q.empty():
a=q.get()
if (a<10):
print("good")
...