我正在尝试构建一个web服务来处理来自多个客户端的请求。更具体地说,当客户机向我的服务器发送请求时,我将使用他/她的凭据启动交互式代理api,然后相应地进行交易。在我们的服务上进行的交易只在指定的时间发生,因此大多数请求都在1小时的间隔内(我的云运行的持续时间是1小时)。现在我需要一个类来跟踪这些用户即将发出的请求,这样我就可以在预热前获得他们的ibapi。简化的体系结构如下所示:
import falcon
from app.ib_factory import IBFactory
api = application = falcon.API()
ibfactory = IBFactory()
上述代码位于app.py
class IB_Factory():
def __init__(self):
self.active_ib = {}
async def create_ib(self, user_id, user_credentials):
if user_id not in self.active_ib:
self.active_ib[user_id] = CREATE_IB(user_credentials)
return self.active_ib[user_id]
async def create_ib_async(self, user_id, user_credentials):
await self.create_ib(self, user_id, user_credentials)
我有另一个脚本来处理post请求:
import app.ibfactory as ibfactory
import asyncio
def on_post(self, req, resp):
## Extract credentials from request
data_pubsub = json.loads(json.loads(req.stream.read()))
user_credentials = data_pubsub["credentials"]
user_id = data_pubsub["user_id"]
## Asynchronous code starts here
asyncio.set_event_loop(asyncio.new_event_loop())
loop = asyncio.get_event_loop()
ib_api = loop.run_until_complete(ibfactory.create_ib_async(user_id, user_credentials))
## Tradings Below using ib_api
为了共享全局变量active_ib
,我需要将gunicorn
设置为--preload
。但是,如果没有async
,所有请求都是同步完成的,第二个用户必须等待第一个用户完成所有操作后才能开始,这是非常低效的。现在有了async
,我一直得到这个错误This event loop is already running
你知道我怎么修吗
谢谢
目前没有回答
相关问题 更多 >
编程相关推荐