如何在类外部访问Thread类变量

时间:2019-12-02 17:00:04

标签: python multithreading flask

我的一般python知识无法按照要求运行以下代码段。如下所示,函数侦听器正在作为线程运行并侦听ativemq队列(STOMP)中的消息。当消息到达时,只需在控制台上打印即可。 我的要求是,我需要在类变量之外访问该消息,并对每条消息进行一些操作,就像我在do_something函数中编写的一样,然后将其传递给Flask以在webpage(api)上显示它-请帮助。 我已经尝试了全局,队列和许多其他事情,但没有成功。

import time
import sys
import stomp
import threading
import json
from flask import Flask, request, jsonify
data=[]
file = []
final = {}
temp = {}
search = 'File'
app = Flask(__name__)

@app.route('/', methods=['GET'])
def test():
   global search,queue
   '''
   while not queue.empty():
      mess = queue.get()
   mess=''.join(mess).split('&')
   print(mess)
   file = list(filter(lambda x: search in x, mess))
   if file:
     mess.remove(file[0])
     for i in mess:
       k, v = i.split('=')
       temp.update({k: v})
     final[file[0]] = temp
     print(mess)
   return(final)
   #do_something(message)
   '''
   return("Queue test")


def do_something(message):
    global data,file,final,temp,search
    #print('thanks for your message %s' %message)
    #message=message.split('&')
    message=''.join(message).split('&')
    data=message
    file = list(filter(lambda x: search in x, data))
    if file:
       data.remove(file[0])
       for i in data:
         k, v = i.split('=')
         temp.update({k: v})
       final[file[0]] = temp
       print(final)



class MyListener(object):
    def on_error(self, headers, message):
        print('received an error %s' % message)
    def on_message(self, headers, message):
        print('received a message %s' % message)
        do_something(message)


def listener():
    global messages
    conn = stomp.Connection(host_and_ports=[('localhost', 61613)])
    lst = MyListener()
    conn.set_listener('',lst)
    conn.start()
    conn.connect("admin","admin",wait=True)
    conn.subscribe(destination='test', id = '1', ack='auto')
    while True:
       time.sleep(30)



if __name__ == "__main__":
    condition = threading.Condition()
    t1 = threading.Thread(target=listener)
    t1.start()
    app.run(host = '0.0.0.0',port=5000,debug=True)

0 个答案:

没有答案