Ethereum: Process async results in another thread – app architecture (python-3.7)

Ethereum: Asynchronous Processing Creates Another Thread for Efficient Application Architecture

As the demand for decentralized applications (dApps) continues to grow, it is crucial to optimize the architecture to ensure that they run smoothly. One of the most important aspects of building efficient dApps is handling asynchronous data processing and visualization. In this article, we will look at how to process asynchronous results in another thread using Python 3.7 using the Ethereum API for trading data.

Why Asynchronous Processing?

When working with real-time data, such as when trading via the Binance API, asynchronous processing is essential to maintaining a responsive user experience. The traditional method of blocking all threads until the data is processed can cause significant performance issues and delay interactions. If we move asynchronous tasks to another thread, then:

  • Improves responsiveness
  • Reduces latency
  • Scales for high traffic or concurrent usage

Ethereum API for trading data

To get started, let’s connect to the Binance API using Python 3.7. We use the “requests” library to send asynchronous HTTP requests and retrieve trading data.

import requests

def get_binance_trades(symbol, limit):

"""Getting trade data from Binance API""

url = f"

response = requests.get(url)

return response.json()

Another thread is spawned when processing async

To process asynchronous results, we create a separate thread using the “thread” library. For asynchronous I/O operations, we will use the “asyncio” library.

import asyncio

class "TradeProcessor":

def __init__(self):

self.trades = []

async def fetch_trades(self, symbol):

""" Get trade data from Binance API and add to list"""

trades = await get_binance_trades(symbol, 10)





Get up to 10 trades

self.trades.extend(trades)

async def process_trades(self):

"""Processing and displaying trade data"""

while true:

if not self.trades:

break

print(f"Processing {len(self.trades)} trades...")


Visualize trade data with Plotly

import plotly.graph_objs

figure = go.Figure(data=[go.Scatter(x=self.trades[:20], y=self.trades[:20])))

fig.update_layout(title="Trade Data", xaxis_title="Timestamp", yaxis_title="Price")

print(figure)

await asyncio.sleep(5)

Wait 5 seconds before processing the next batch

Application Architecture

Our application architecture consists of two main components:

  • Trade Processor

    Ethereum: Process async results in another thread - app architecture (python-3.7)

    : This class is responsible for retrieving trade data from the Binance API and adding it to the list. The “process_trades” method processes trades in batches using another thread.

  • Web App: We will create a web interface that will display the processed trade data, using Plotly to display the results.

import dash

import dash from dcc, html, no_update

import plotly.graph_objs

app = dash.Dash(__name__)

app.layout = html.Div([

html.H1 ("Trade Data App"),

dcc.Graph(id="trade-graph", figure=go.Figure(data=[go.Scatter(x=[], y=[])]),

])

@app.callback(

[html.P _ range(20)],

[dash.dependencies.Output("trade-graph", "figure")],

[dash.dependencies.Input("trade-graph", "update-plotly")]

)

def update_graph(updated_plotly):


Update your trade graph using Plotly

trade = app.data["trade"]

figure = go.Figure(data=[go.Scatter(x=trades[:20], y=trades[:20])))

fig.update_layout(title="Trade Data", xaxis_title="Timestamp", yaxis_title="Price")

back figure

if __name__ == "__main__":

app.run_server(debug=True)

In this example, we have created a simple web interface that displays processed trade data.

ethereum expected constructor