从另一个函数调用函数并继续(不要等待完成)python

Call function from another function and move on (don't wait for finish) python

我读了很多关于多处理、线程的文章,但我仍然对简单的事情有疑问。我有两个功能。我想一个接一个地调用并移动一个(这个被调用的函数不能让我慢下来)。

例子

def main():
    print("my operations")
    Thread(target=child(), args=()).start()
    print("rest operations")


def child():
    #here are some operations that takes 3 seconds
    print("background operations")

关键是来自子函数的操作不会减慢我的速度。我只想调用该函数并继续。所以我想要这样的输出:

my operations
rest operations
background operations

但是使用 Thread(target=child(), args=()).start() 执行此操作看起来像

my operations
#then call child function wait 3 seconds
background operations
rest operations

有选项可以做我想做的事吗?

当你这样做时

Thread(target=child(), args=()).start()

你在主线程上调用child,然后将结果作为目标传递!你想传递 child 函数本身,而不是调用它的结果:

Thread(target=child, args=()).start()

python 线程不是并发的,至少在 CPython 中不是,因为 GIL(Global Interperter Lock)。线程将一次 运行 一个,并且会根据一些规则在它们之间切换,例如等待 IO(例如 Web 请求)或者如果线程已经 运行ning 太久(15 毫秒) iirc).
您实际上并没有强制线程切换的好方法,因此演示竞争条件并不像您尝试的那样简单。 Here 是一个很好的博客 post 谈论它并提供一些例子