Currently working on a project that uses Binance Websockets to fetch data of the coin prices and makes calculations with the data.
The number of coins that I calculate is dynamic (varies from 150 to ~250).
The ASYNC function is called calculate(client, queue, coin)
It takes the following arguments:
- client: The Binance Async client (python-binance library)
- queue: A queue where opportunities get passed in if the calculation has a positive outcome
- coin: The coin e.g. BTC
The calculate function contains a while 1 (infinitive) loop, so the calculations keep on running.
At the moment the main function uses asyncio.gather to combine the calculate functions for the different coins (150 - ~250)
async def main(queue):
await asyncio.gather(
    calculate(client, queue, 'BTC'),
    calculate(client, queue, 'ETH'),
    calculate(client, queue, 'BNB'),
    calculate(client, queue, 'LINK'),
    calculate(client, queue, 'SHIB'),
    calculate(client, queue, 'ADA'),
    calculate(client, queue, 'XRP'),
    calculate(client, queue, 'VET')
    # This continues for the the other +100 coins
    )
if __name__ == "__main__":
    loop = asyncio.get_event_loop()
    loop.run_until_complete(main(queue))
This is not a pretty way of writing the code and it is very inefficient if I want to change the coins. Using an API I fetch the coins that need to be calculated. So I need to manually update the 100+ lines which call the function for each coin and update some other files to ensure that everything runs smooth.
What would be a good solution for this issue?
I've seen threading/ multithreading / more complex uses of asyncio, but I couldn't see how to apply it to this issue.
Help would be much appreciated.
 
    