如何将异步设计模式转换为同步模式?
问题描述:
我写了一个脚本,从我的股票交易,它看起来像这样获得的账面价值(工作):如何将异步设计模式转换为同步模式?
from ib.opt import ibConnection, message
def account_summary_handler(msg):
print(msg.tag, msg.value, msg.currency)
connection.cancelAccountSummary(1)
connection.disconnect()
connection = ibConnection(port=7497, clientId=100)
connection.register(account_summary_handler, 'AccountSummary')
connection.connect()
connection.reqAccountSummary(1, 'All', 'NetLiquidation')
这是一个实时的API,所以一旦连接是打开的,更新流,并my_account_handler
每次更新都会被调用。
我想从另一个同步脚本中的账户余额,像,被称为是这样的:
myaccount.account_summary()
我写的东西,看起来像这样(未经):
class IBAccount(object):
def __init__(self):
self.clientId=100
self.port=7497
def connect(self):
self.connection = ibConnection(port=self.port, clientId=self.clientId)
def account_summary(self):
self.connection.register(self.account_summary_handler, 'AccountSummary')
connection.connect()
connection.reqAccountSummary(1, 'All', 'NetLiquidation')
def account_summary_handler(self, msg):
self.connection.cancelAccountSummary(1)
self.connection.disconnect()
return msg.value
我相信我需要account_summary()来阻止并返回实际的账户值,而不是通过不同的函数返回。
我的问题是: 如何获取account_summary()以返回帐户值?
此外,如果我对此代码使用了不适当的设计模式,并且不应该使用类,请告知。
答
解决的办法是让它说:
从ib.opt进口ibConnection,消息
class IBstate(object):
def __init__(self):
self.clientId=100
self.port=7496
self.netLiquidation = None
self.connection = ibConnection(port=self.port, clientId=self.clientId)
self.connection.connect()
self.connection.register(self.account_summary_handler, 'AccountSummary')
self.connection.reqAccountSummary(1, 'All', 'NetLiquidation')
def account_summary_handler(self, msg):
self.netLiquidation = msg
这在后台运行,并为他们改变对端更新对象的变量。