运行 同一线程中的多个函数按特定顺序

Running Multiple functions in the same Thread in a specific order

我有三个函数可以使用 papermill 执行 3 个不同的 jupyter 笔记本,我希望第一个 (job1) 和第二个 (job2) 函数同时 运行,最后一个函数 (job3) 运行 仅当第一个函数 (job1) 完成 运行ning 且没有任何错误时。我不确定为第二个函数创建一个新线程是否有意义或如何正确使用 join() 方法。 我在 Windows 上 运行ning 并且由于某种原因 concurrent.futures 和多处理不起作用,这就是我使用线程模块的原因。

def job1():

    return pm.execute_notebook('notebook1.ipynb',log_output=False)

def job2():

     return pm.execute_notebook('notebook2.ipynb',log_output=False)

def job3():

     return pm.execute_notebook('notebook3.ipynb',log_output=False)


t1 = threading.Thread(target = job1)
t2 = threading.Thread(target = job2)
t3 = threading.Thread(target = job3)


try:
   t1.start()
   t1.join()
   t2.start()

except:
   pass

finally:

   t3.start()

我喜欢从想象所需的流程开始,据我所知,它看起来像:

这意味着 t1 和 t2 需要同时启动,然后您需要同时加入:

   t1.start() # <- Started 
   t2.start() # <- Started
   # t1 and t2 executing concurrently

   t1.join()
   t2.join()
   # wait for both to finish

   t3.start()
   t3.join()

t1、t2 连接顺序并不重要,因为您的程序无论如何都必须等待最长的 运行 线程。如果 t1 先完成它会阻塞 t2,如果 t2 先完成它仍然需要等待 t1,然后 "no-op" 在 t2.join() 上。