在同一线程中以特定顺序运行多个函数。

我有三个函数,使用papermill执行3个不同的jupyter笔记本,我希望第一个函数(job1)和第二个函数(job2)同时运行,最后一个函数(job3)在第一个函数(job1)完成运行后才运行,而不会出现任何错误。我不知道为第二个函数创建一个新的线程是否合理,也不知道如何恰当地使用join()方法。我在Windows上运行,由于某些原因,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()

解决方案:

我喜欢先将所需的流程可视化,我理解为是这样的。

enter image description here

这意味着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,然后会在t2.join()上 “no-op”。

给TA打赏
共{{data.count}}人
人已打赏
未分类

未解决的引用 "print"。

2022-9-8 5:19:39

未分类

在Dataframe中解析多索引,以提高清晰度。

2022-9-8 5:30:35

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索