I asked a similar questions some days ago but it was a bit unclear so I deleted it and made this new one here.
I have a project that fetches market data from cryptocurrency exchanges (Binance, Kraken, Poloniex, etc...). I want to be able to add additional exchanges while the project is up and running. For example I am pulling data every 10 seconds from Binance and Poloniex but now I want to add support for Kraken. How can I keep fetching data from the other two exchanges (add Kraken without restarting the program).
I currently have 2 solutions in mind.

Start the client that is fetching the data as a new process for each exchange
Use importlib.import_module() to load new modules and handle every exchange in the same process (using asyncio)

Also, what if I want to add functionality like fetching data from another API endpoint. Method 1 would probably require a restart, with method 2 I could reload all modules and update the class instances between the fetch calls. But I am unsure about the side effects this can cause. 
Maybe there is a default way how such a project is implemented?
I would consider designing a base class, named something like CryptoCurrencyExchangeParser.  This class would have methods that allowed client code to extract data in a standard way, no matter which exchange it came from.  Each specific exchange would then be a subclass, containing methods (possibly defined as abstract in the base class) to access and parse the data.
Then I would write a factory function to load one parser, probably specified by a string.  This factory function would use the python import machinery to find the code for the requested parser.  The main program would keep a list of the active parsers.
Such a design would mean that all of the parsers used exactly the same mechanism, whether they were loaded on program start or ten years later.  Whether to use multiprocessing, multithreading or some other approach would be factored out as a separate design decision.
Python dynamically update/add/remove modules