Advertisement
gil9red

Untitled

Nov 2nd, 2020
1,906
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.28 KB | None | 0 0
  1. import multiprocessing as mpl
  2. # import stocker
  3. from time import time
  4. import threading
  5.  
  6.  
  7. def fill_d(data):
  8.     d, name, lock = data
  9.     val = [266.07, 1.276, '2019-11-11'] #stocker.predict.tomorrow(name)  # val = [predicted price, error(%), date of the next business day]
  10.     try:
  11.         lock.acquire()
  12.         data = d[name][val[-1]]
  13.         data.append(val[0])
  14.         d[name][val[-1]] = data
  15.     except KeyError as e:
  16.         print('Error:', e)
  17.         d[name] = {}
  18.         d[name][val[-1]] = [val[0]]
  19.     finally:
  20.         lock.release()
  21.  
  22.  
  23. def runner(name, d, l):
  24.     t = time()
  25.     with mpl.Pool() as p:
  26.         p.map(fill_d, [(d, name, l) for _ in range(5)])
  27.     print(f'{round(time() - t, 2)}s')
  28.  
  29.  
  30. stock = ['AAPL', 'AMZN']
  31.  
  32.  
  33. if __name__ == '__main__':
  34.     manager = mpl.Manager()
  35.     d = manager.dict()
  36.     threads = []
  37.     for name in stock:
  38.         t = threading.Thread(target=runner, args=(name, d, manager.Lock()))
  39.         threads.append(t)
  40.         print(f'[+] Start thread {t.name}')
  41.         t.start()
  42.         '''Я думаю что каждый поток должен иметь свой lock, в противном случае потоки будут "ждать друг-друга"
  43.        '''
  44.     for i in threads:
  45.         i.join()
  46.     print(d)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement