在我的Python脚本中,我收到一个恒定的数据流,但想通过调用异步方法异步推送数据。当方法可用时,始终按下存在于缓冲区中的数据。
为了实现这一点,我有一个不断被调用的try / catch,它创建一个执行方法的线程对象(我假设在方法完成执行时返回),并且线程正在运行try / catch中断。
import thread
import threading
thr = None
...
try:
if thr.is_alive():
print "thread running"
else:
thr.Thread(target=move_current_data, args=(data_buffer))
thr.start()
data_buffer.clear()
except NameError:
print ""
except AttributeError:
print "
def move_current_data(data_buffer):
...
return
有没有更简单,更清晰的方式来写这个?
如果需要,我可以提供更多信息
答案 0 :(得分:0)
您应该使用队列。一个线程只需要监视队列并推出任何新数据。当新数据可用时,主线程只会添加到队列中。
示例:
import threading
import queue
def pusher(q):
while True:
item = q.get()
if item is None:
return # exit thread
...push data...
def main():
q = Queue.Queue()
# start up the pusher thread
t = threading.Thread(target = pusher, args=(q))
t.start()
# add items
q.put(item1)
...
q.put(item2)
...
...
# tell pusher to shut down when queue is empty
# and wait for pusher to complete
q.put(None)
t.join()
请注意q.put(...)
不会阻止主线程。