You might want to try using a multiprocessing Manager list or dictionary. You can write to it in a process or processes, and can plot from it in another process. This is a simple program that uses a Manager list. It does not plot in real time, but the list creation and use is the same. One of the docs on the web https://pymotw.com/3/multiprocessing/
import random import time from multiprocessing import Process, Manager def add_em(process_num, add_list, mgr_list): total=0 for num in add_list: total += num mgr_list.append([process_num, total, add_list]) manager = Manager() mgr_list = manager.list() processes_list=[] ## start 10 processes for ctr in range(10): ## how many numbers to add up length_nums=random.randint(2, 11) add_list=[] for num in range(length_nums): add_list.append(random.randint(1, 100)) p=Process(target=add_em, args=(ctr, add_list, mgr_list)) p.start() processes_list.append(p) print("waiting for processes to finish") for p in processes_list: if p.is_alive(): print(" ", p.name, p.pid, p.is_alive()) time.sleep(0.5) print("\nAll processes finished") import pprint pprint.pprint(list(mgr_list))