从另一个函数调用函数并继续(不要等待完成)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 谈论它并提供一些例子
我读了很多关于多处理、线程的文章,但我仍然对简单的事情有疑问。我有两个功能。我想一个接一个地调用并移动一个(这个被调用的函数不能让我慢下来)。
例子
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 谈论它并提供一些例子