Q:

Trying to run multiple functions at once? 

I am really new to web scraping. 
I am trying to code software that monitors multiple share prices at once and must Identify when there is a change in the price and must show me the new price. 
I have got it working that whenever there is a change in price it shows me the new price but it only works with one share and since it is in a while loop it won't break and move on to the next share. 
I don't want to jump out of the while loop since it will stop monitoring the price.  Then the browser will close and selenium must reopen it when wanting to see the new price which will take longer. 
I am trying to create a function for each share I want to monitor. 
I can't seem to get it to work that it will monitor more than one share at once.  I have tried threading but then only one share price shows up. 
Excuse all the imported libraries I just experimented
Any help will be appreciated. 
import requests
import time
import tkinter

from selenium import webdriver
import time
from selenium.webdriver.firefox.options import Options
global driver
import threading
from multiprocessing import *
import os

options = Options()
options.headless = True
driver = webdriver. Firefox(options = options, executable_path=...driver path...)
counter_for_mtn = 0 # I only use counter for printing the first price

def MTN():#mtn is the name of the share
      global counter_for_mtn
      url = 'https://www.google.com/search?q=mtn+shares&safe=strict&sxsrf=ALeKk02Dyba3hHbg1S4YeLOFhw4FPfhqdQ:1588770127528&source=lnms&tbm=fin&sa=X&ved=2ahUKEwjl2dL4pZ_pAhUMZMAKHU1WDGAQ_AUoAXoECBkQAw&biw=1920&bih=969#scso=_XLWyXpmmE8uEhbIPpf-ooAY1:0'
      driver.get(url)
      while True:
             value_mtn = driver.find_element_by_xpath('/html/body/div[6]/div[2]/div[9]/div[1]/div[2]/div/div[2]/div[2]/div/div/div/div/div/sticky-header/div[2]/div/div[1]/div/div[1]/div/div/div/div/div/div/g-card-section/div/g-card-section/span[1]/span/span[1]').text
             if counter_for_mtn == 0:
                   print('MTN: '+ str(value_mtn))
                   counter_for_mtn =1

             try:
                  if mtn_old_price ! = value_mtn:
                  print('MTN: '+str(value_mtn))
             except:
                   pass

             mtn_old_price = value_mtn

counter_for_sasol = 0#only use counter to print out the first price

def Sasol():#sasol is the name of the share
     global counter_for_sasol

     url = 'https://www.google.com/search?q=sasol+shares&safe=strict&sxsrf=ALeKk004QjkQ84tFd8TP8ikaQc3yhNRkrQ:1588772136446&source=lnms&tbm=fin&sa=X&ved=2ahUKEwjpkMm2rZ_pAhV4Q0EAHZ7jCWEQ_AUoAXoECBkQAw&biw=1920&bih=969'
     driver.get(url)

     while True:
           value = driver.find_element_by_xpath('/html/body/div[6]/div[2]/div[9]/div[1]/div[2]/div/div[2]/div[2]/div/div/div/div/div/sticky-header/div[2]/div/div[1]/div/div[1]/div/div/div/div/div/div/g-card-section/div/g-card-section/span[1]/span/span[1]').text
           if counter_for_sasol == 0:
               print('SASOL: ' + str(value))
               counter_for_sasol = 1

           try:
               if old_price ! = value:
                   print('SASOL: ' + str(value))
           except:
               pass

           old_price = value

thread1 = threading. Thread(target = MTN())
thread1.start()
thread2 = threading. Thread(target = Sasol())
thread2.start()

A:

how do I get both Functions Sasol() and MTN() to run at the same exact time? 

This works (using toy functions) although technically I'm not sure you can say that they are running at the exact same time:
import sys,time,threading,random

def f():
    for i in range(10):
        print(f'{i}:f',file=sys.stdout)
        time.sleep(random.random())
def g():
    for i in range(10):
        print(f'{i}:g',file=sys.stdout)
        time.sleep(random.random())

if __name__ == '__main__':
    threads = [threading. Thread(target=func) for func in [f,g]]
    for t in threads:
        t.start()

This also works - using single function passing a different argument to each thread - in your case the argument(s) would be unique string(s) specific to the things you want to retrieve. 
import sys,time,threading,random

def f(s):
    for i in range(10):
        print(f'{i}:{s}',file=sys.stdout)
        time.sleep(random.random())

if __name__ == '__main__':
    threads = [threading. Thread(target=f,args=(arg,)) for arg in ['one','two']]
    for t in threads:
        t.start()

