如何在 Jupyter Notebook 中 运行 同步多个函数?

How to run multiple functions synchronous in Jupyter Notebook?

我尝试 运行 在 Jupiter Notebook 中同时使用多个功能。

我有两个使用 Selenium 和 运行 无限时间的网络抓取函数,它们总是创建一个更新的 DataFrame。另一个函数合并两个 DataFrame 并进行一些计算。

由于数据总是在变化,并且需要在同一秒内计算来自不同DataFrame的计算(两个DataFrame每5秒更新一次),我想知道我如何才能运行所有功能同时进行时间.

由于我的代码主要是WebScraping,所以我更多地使用它来描述我的目标,并希望使其更具可读性。我已经尝试使用 'multiprocessing',但它在笔记本中没有任何作用。

def FirstWebScraping():

  while True:
   time.sleep(5). 
   #getting all data for DataFrame

def SecondtWebScraping():

  while True:
   time.sleep(5). 
   #getting all data for DataFrame


def Calculations():
  while True:
    #merging DataFrame from First- and SecondWebScraping
    #doing calculations
    #running this function infinite and looking for specific values

#Goal
def run_all_at_the_same_time()
  FirstWebScraping()
  SecondWebScraping()
  Calculations()

尽管线程没有显示出与多处理相同的好处,但它对我和 selenium 都有效。我在计算函数的开头设置了一个等待时间,然后从那里开始无限循环。

from threading import Thread
if __name__ == '__main__':
    Thread(target = FirstWebScraping).start()
    Thread(target = SecondWebscraping).start()
    Thread(target = Calculations).start()

如果您遵循以下两条规则,您可以在 Jupyter 中 运行 multiprocessing

  1. 将辅助函数放在单独的模块中。
  2. 使用 if __name__ == '__main__':
  3. 保护仅主进程的代码

假设你的三个函数移动到 worker.py:

import multiprocessing as mp
import worker

if __name__ == '__main__':
    mp.Process(target=worker.FirstWebScraping).start()
    mp.Process(target=worker.SecondWebscraping).start()
    mp.Process(target=worker.Calculations).start()