我有一个名为 MyScript 的 Python 脚本(类似 unix,基于 RHEL),它有两个函数,分别称为 A 和 B。我希望它们在不同的独立进程中运行(分离 B 和 A):
- 启动脚本 MyScript
- 执行功能 A
- 生成一个新进程,将数据从函数 A 传递到 B
- 当函数 B 运行时,继续函数 A
- 当函数 A 完成时,即使 B 仍在运行,也要退出 MyScript
我认为我应该使用多处理来创建一个守护进程,但文档表明这不是正确的用例。所以,我决定生成一个子进程和 child^2 进程(孩子的孩子),然后强制孩子终止。虽然这种解决方法似乎有效,但看起来真的很难看。
你能帮我让它更pythonic吗?subprocess 模块是否有可以对函数进行操作的方法?下面的示例代码。
import multiprocessing
import time
import sys
import os
def parent_child():
p = multiprocessing.current_process()
print 'Starting parent child:', p.name, p.pid
sys.stdout.flush()
cc = multiprocessing.Process(name='childchild', target=child_child)
cc.daemon = False
cc.start()
print 'Exiting parent child:', p.name, p.pid
sys.stdout.flush()
def child_child():
p = multiprocessing.current_process()
print 'Starting child child:', p.name, p.pid
sys.stdout.flush()
time.sleep(30)
print 'Exiting child child:', p.name, p.pid
sys.stdout.flush()
def main():
print 'starting main', os.getpid()
d = multiprocessing.Process(name='parentchild', target=parent_child)
d.daemon = False
d.start()
time.sleep(5)
d.terminate()
print 'exiting main', os.getpid()
main()