从使用线程和队列模块的Python脚本中识别队列返回

时间:2012-08-31 23:22:14

标签: python multithreading queue

我对之前提出的问题有一个补充问题,如有必要,您可以参考:

Long term instrument data acquisition with Python - Using "While" loops and threaded processes

我已经阅读了大量的SO问题和其他阅读材料,并提出了一段工作正常的代码,尽管它非常简陋:

import ue9
import LJ_Util
import DAQ_Util
import threading
import Queue

queue = Queue.Queue()

def ljThread(ue9ipAddr):
    print '\nExecuting in ljThread...'
    a = ue9.UE9(ethernet=True, ipAddress=ue9ipAddr)
    reading = a.feedback()
    queue.put(reading)

print "Opening device...\n",
# Opens a UE9 at IP Address 192.168.1.127
ipAdd = '192.168.1.127'
feedbackThread = threading.Thread(target=ljThread, args=(ipAdd,))
feedbackThread.start()

outcome = queue.get()
print outcome
print "\nDone"

我的问题是,我想使用单独的线程来访问来自对象ue9.UE9的不同实例的信息,该对象与数据采集单元相关联。我反对每个单位将返回不同的数据,但我需要将正确的数据与正确的单位相关联。有人能指出我通过用于将数据传递回调用线程的队列对象来追踪源的正确方法吗?

非常感谢大家的帮忙!

1 个答案:

答案 0 :(得分:0)

修改ljThread函数以返回识别信息(例如它正在检查的IP地址)以及它读取的数据应该很容易。只需将最后一行替换为:

queue.put((ue9ipAddr, reading))

然后,当您从队列中获取结果时,请执行以下操作:

ip, outcome = queue.get()

然后,您可以使用IP执行您需要执行的操作。