I have spent the day trying to improve the performance when sampling from the ADC Pi and I have managed to make some performance gains by using threading in Python.
I first updated the demo_speedtest.py file to read from all 8 channels and record the overall sample rate to give me a baseline to work from. The results were:
Bit Rate: 12 - 214.82 samples per seconds
Bit Rate: 14 - 64.29 samples per seconds
Bit Rate: 16 - 16.32 samples per seconds
Bit Rate: 18 - 4.10 samples per seconds
Next I created a new file demo_speedtestthreaded.py which splits the ADC reads from each chip into a separate thread. This allowed the program to read from both chips at the same time. The results were almost a doubling in performance.
Bit Rate: 12 - 434.87 samples per seconds
Bit Rate: 14 - 123.65 samples per seconds
Bit Rate: 16 - 31.94 samples per seconds
Bit Rate: 18 - 8.05 samples per seconds
I made a couple changes to the main ADCPi.py library to improve its threading performance, so you may want to update to the latest version.
I also changed the speed of the I2C bus to be 1MHz which is the maximum speed supported by the ADC chip. If you have not done this on your Raspberry Pi you can find out how to do it in our I2C tutorial.
In theory if you use two ADC Pi boards and create a new thread for each chip that should give you a performance improvement but the gains will probably not be as big as you are still limited by the speed of the I2C bus. I tried creating a separate thread for each channel but that just caused timeout errors where it tried to switch channels before getting the results from the first one so you will be limited to one thread per ADC chip.
These tests were all done on a Raspberry Pi 3+ so you may see some small improvements using a Raspberry Pi 4. The other way to improve the sample rate would be to use a compiled langage like C or C++ instead of Python.
Hopefully the new threaded demo will help you improve the performance of your program.