我有一个运行多个 Web 服务的 Tornado Web 服务器。我需要服务 A 中的一个操作来调用服务 B 上的操作。我正在使用 Suds 对服务 B 进行此调用。目前一切都会挂起,除非我将 Suds 调用放入单独的线程中,但现在我需要从该调用(在线程 1 中)获取数据返回到主线程,以便我可以将其发送回原始请求 Web 服务(服务 A)。一些代码:
if input.payment_info.issuer == 'Amex':
def t1():
url = 'http://localhost:8080/PaymentService?wsdl'
client = Client(url)
result = client.service.process_amex(payment_info.issuer, payment_info.number, payment_info.sort_code)
t = Thread(target=t1)
t.start()
if result == "Success":
return result #How can I access it to return it to the main service
抱歉,如果不清楚,我知道线程是一个复杂的问题,但我在这里看不到任何其他选项,因为没有它,代码就会挂起。
编辑:需要明确的是,我没有使用 suds 来调用服务 A。唯一的 suds 实例用于调用服务 B。
根据 Alex Martelli 的帖子(http://stackoverflow.com/a/2846697/559504),我也尝试过使用队列,但它再次挂起。
if input.payment_info.issuer == 'Amex':
def t1(q):
url = 'http://localhost:8080/PaymentService?wsdl'
client = Client(url)
result = client.service.process_amex(payment_info.issuer, payment_info.number, payment_info.sort_code)
q.put(result)
q = Queue.Queue()
t = Thread(target=t1, args=(q))
t.daemon = True
t.start()
result = q.get()
if result == "Success":
return "Success"