【问题标题】:how to make 2 functions follow each other only if one finished doing its work仅当一个功能完成工作后,如何使两个功能相互跟随
【发布时间】:2019-02-20 08:04:47
【问题描述】:

好的,所以我有 2 个函数,它们都有一个全局变量,它们都是线程,

function 1
get global variable
do something
sleep()

function 2
get global variable
do something
sleep()

现在它们正在同步运行(两者的时间戳相同)或锁定(func1 进入睡眠状态,只有在它唤醒之后 func2 才会启动)取决于我使用的代码 我想要发生的是 func1 完成它的工作并进入睡眠状态,然后 func2 开始运行并进入睡眠状态,我还需要一种方法来确保如果它们同时醒来,它们不会试图超越对方.

我怎样才能实现这样的行为?

【问题讨论】:

  • 为什么不设置func1的最后一行调用func2呢?
  • 因为 func1 进入睡眠状态它不会运行 thread2 直到它醒来
  • + 它只是给代码增加了更多的复杂性。在我的情况下,它几乎是意大利面条代码,因为用户选择他想要运行 func1 或 func2 或一起运行它们......
  • 使用了线程锁机制而不是队列,上面的帖子你给了我这个链接 [link] hackernoon.com/… [/link] 我用这篇文章使用锁来修复它

标签: python multithreading python-multithreading


【解决方案1】:

您需要让每个函数都表现得像“临界区”。代码的关键部分是一次只能由一个线程执行的代码。一个简单的老派方法是使用彼得森的临界区算法。 Here 要获得更好的方法,您可以使用 locks 同步线程。如果第一个函数没有释放锁,这不允许线程进入另一个函数。 Here 是阅读它的好地方。

【讨论】:

  • 我尝试使用锁,问题是它们共享的变量和数据来自网络浏览器,这意味着即使它们一个接一个地执行,它们执行速度如此之快,以至于当 func2 转到让数据可以使用,它还没有出现在屏幕上,因为页面加载速度不够快.. 然后它抛出一个错误,即使当我查看时我也可以看到它正在寻找的元素页面加载...
  • 对不起,通用解决方案。除了在 function2 的关键部分的开头使用 sleep() 之外,我想不出任何其他方法,从而强制等待。
  • 我希望它很简单,有时 func1 和 func2 的睡眠重叠,所以它们同时醒来,它不是一个恒定的睡眠它总是在某个范围内变化,所以即使我放了 5 秒sleep on func2 start 有时 func1 会在 func2 唤醒时唤醒,导致错误..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-28
  • 1970-01-01
  • 2012-07-01
  • 2016-08-27
相关资源
最近更新 更多