首页 > 解决方案 > Python-处理队列输出的If语句未正确处理所有输出

问题描述

我通过队列接收数据更新,为了确定更新是更新的订单还是更新的市场价格,我需要运行一个 if 语句,以查看正在接收哪个自定义类。这工作正常,我可以看到正在接收正确的类,并且 if 语句(或至少这部分)正常工作。

我苦苦挣扎的地方是我有 2 个函数,一个更新订单并将它们以某种格式输入第二个函数,然后将市场数据(带有订单)格式化并以可读格式输出。

功能本身可以正常工作,因为如果我插入预期的数据,我会得到正确的输出......但是我正在努力让我的头脑正确接收数据,因为这似乎是导致问题的原因。

while True:
    combined_books = market_queue.get()
    order_books = []
    market_books = []
    for y in combined_books:
        print(y)
        if isinstance(y, MarketBook):
            market_books.append(y)
            time_stamp = datetime.now()
            print(time_stamp, "Running for: ", time_stamp - start_time,
                  "======================================================")
            update_market_book(market_books, mb, uo, market_catalogues, mkt_runners, profitloss, trading, False,
                               start_time, eo)
        elif isinstance(y, CurrentOrders):
            order_books.append(y)
            uo = update_orders(order_books, mkt_runners, profitloss, trading, eo, mb)
            time_stamp = datetime.now()
            print(time_stamp, "Running for: ", time_stamp - start_time,
                  "======================================================")
            update_market_book(market_books, mb, uo, market_catalogues, mkt_runners, profitloss, trading, False,
                               start_time, eo)
        else:
            print('Its all gone horribly wrong: ', y)

因此,发生的情况如下:

1) 如果我收到市场数据更新,会触发 update_market_book 功能并且该功能正常工作。

2)如果我收到一个订单更新,这被正确识别,但不更新 market_book (即在 2 个函数中,update_orders 触发,但是没有 market_books 来填充 update_market_books 函数的第一个变量,因此它只是显示空白)。

3) 下一次市场数据更新通过时,之前的订单正确显示。

所以本质上,我不明白的是,为什么在本节中:

        elif isinstance(y, CurrentOrders):
            order_books.append(y)
            uo = update_orders(order_books, mkt_runners, profitloss, trading, eo, mb)
            time_stamp = datetime.now()
            print(time_stamp, "Running for: ", time_stamp - start_time,
                  "======================================================")
            update_market_book(market_books, mb, uo, market_catalogues, mkt_runners, profitloss, trading, False,
                               start_time, eo)

market_books 是空白的,当它已经被先前的更新填充和/或更重要的是,我如何确保它填充了最后更新的 market_books (正确)触发了 if 语句的第一部分。

希望这是有道理的,并且对于 Python 专家来说可能真的很简单,也许是一天中的时间,但我似乎无法弄清楚这里的逻辑,所以任何帮助将不胜感激。

标签: pythonif-statementqueue

解决方案


推荐阅读