【问题标题】:Getting the results simultaneously from different sources同时从不同来源获取结果
【发布时间】:2022-01-06 16:14:16
【问题描述】:

这里是python新手!

我正在尝试为自己编写一个小程序,它基本上是从不同的交易所获取价格信息并进行比较,到目前为止它运行良好,但老实说,我希望在性能和效率方面做得更好。

我所说的效率是指我的程序是逐步检查价格并打印结果。我的问题是我可以将其转换为同时检查来自不同交易所的价格并同时打印它们吗?

下面是我写的部分代码:

        #Novadax
        symbol_novadax = coin_list[i] + "_USDT"
        response_novadax = requests.get('https://api.novadax.com/v1/market/ticker?symbol=' + symbol_novadax)
        novadax_dic = json.loads(response_novadax.content)
        try:
            if "ask" in novadax_dic["data"]:
                novadax_bid_price = float(novadax_dic["data"]["bid"])
                print("novadax_bid_price "+str(novadax_bid_price))
                novadax_ask_price = float(novadax_dic["data"]['ask'])
                print("novadax_ask_price " + str(novadax_ask_price))
                if (max_bid_val < novadax_bid_price):
                    max_bid_val = novadax_bid_price
                    max_bid_place = "novadax"
                if (min_ask_val > novadax_ask_price):
                    min_ask_val = novadax_ask_price
                    min_ask_place = "novadax"
        except:
            print(coin_list[i] + " not in novadax")

        if is_run == False:
            telegram_send.send(messages=["False novadax"], parse_mode=None)
            break

        #ZT
        symbol_zt = coin_list[i] + "_USDT"
        response_zt = requests.get('https://www.ztb.im/api/v1/tickers')
        zt_dic = json.loads(response_zt.content)
        # print(next(item for item in zt_dic["ticker"] if item["symbol"] == symbol_zt))
        try:
            if "buy" in next(item for item in zt_dic["ticker"] if item["symbol"] == symbol_zt):
                zt_bid_price = float(next(item for item in zt_dic["ticker"] if item["symbol"] == symbol_zt)["buy"])
                print("zt_bid_price "+str(zt_bid_price))
                zt_ask_price = float(next(item for item in zt_dic["ticker"] if item["symbol"] == symbol_zt)['sell'])
                print("zt_ask_price " + str(zt_ask_price))
                if (max_bid_val < zt_bid_price):
                    max_bid_val = zt_bid_price
                    max_bid_place = "zt"
                if (min_ask_val > zt_ask_price):
                    min_ask_val = zt_ask_price
                    min_ask_place = "zt"
        except:
            print(coin_list[i] + " not in zt")

        if is_run == False:
            telegram_send.send(messages=["False zt"], parse_mode=None)
            break

我的输入是这样的:

zt_bid_price = 0.12

zt_ask_price = 0.14

novadax_bid_price = 0.13

novadax_ask_price= 0.14

更清楚地说,我不会同时得到这些结果。我的意思是它按顺序打印,我计划在未来添加更多的交换,这意味着如果我决定在代码末尾打印所有内容,这会给我带来稍微旧的数据。有谁知道我该如何解决这个问题?

提前致谢!

【问题讨论】:

  • 这些数据必须有多“旧”才会成为问题?如果您可以同时执行所有请求,您仍然需要等待最慢的请求,这意味着最快的请求现在将是“旧的”。
  • @ScottHunter 我以前没有考虑过,但到目前为止,我正在使用这个程序来检查 60 种不同硬币的价格,并且需要一分钟多的时间来检查它们。因此,如果我要使用相同的代码结构并在最后打印结果,那将给我相当过时的结果。

标签: python json python-3.x python-requests


【解决方案1】:

根据您的实现,您可以使用多处理来保持每个代码运行。但是,每个进程都有开销,这取决于您的系统,可能会或可能不会滞后。您可以让所有进程(代码)在信号或时间间隔上运行,让每个进程同时轮询它们的源(带有时间戳)并返回它们的数据。

有一个学习曲线。下面的行将帮助您开始。

    from multiprocessing import Pool

【讨论】:

    猜你喜欢
    • 2020-06-24
    • 2023-04-01
    • 1970-01-01
    • 2012-03-15
    • 2012-08-11
    • 1970-01-01
    • 2018-11-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多