我想分叉到后台运行一个长时间运行的函数,父项立即退出。我无法使用os.fork()
,因为我需要Windows支持。这就是我想出的:
#!/usr/bin/env python3
import multiprocessing
import time
def long_running_function(timeout=30):
time.sleep(timeout)
if __name__ == '__main__':
multiprocessing.Process(target=long_running_function).start()
它 生成子进程:ps
显示两个具有相同命令字符串的Python进程。但是,在我试用它的Mac和Windows机器上,它就好像我在join()
上调用了Process
:父母和孩子一直在运行,如果我做 ctrl - c ,都死了。我做错了什么?
答案 0 :(得分:-3)
开始多处理Process可以fork,但不是必需的。进程使用与Threading类似的API,它不会导致从OS调用fork()API。在Python中,一个简单的fork示例是:
#!/usr/bin/env python
"""A basic fork in action"""
import os
def my_fork():
child_pid = os.fork()
if child_pid == 0:
print "Child Process: PID# %s" % os.getpid()
else:
print "Parent Process: PID# %s" % os.getpid()
if __name__ == "__main__":
my_fork()
注意我们如何导入os库。在您的示例中,您不会导致fork()永远不会被调用。
请注意,在Windows上,fork()不存在,因此您无法在* nix系统上进行分叉。
请参阅HERE以获取解释Python中分叉的好文章。