是否需要手动停止流程

时间:2017-12-07 10:11:07

标签: python multiprocessing

我是Python中多处理的新手,所以我有点怀疑。我的第一个想法是使用线程,但后来我读到了GIL并转向了多处理。

我的问题是,当我开始这样的过程时:

t1 = Process(target=run, args=lot)
t1.start()

我是否需要以某种方式从主进程停止它,或者在 run()方法完成时它们会关闭?

我知道像 join()这样的东西存在,但是我每隔 n 分钟安排一个作业并且并行启动几个进程,这个程序一直持续到停止,所以我真的不需要等待进程完成。

2 个答案:

答案 0 :(得分:0)

是的,当t1.start()发生时,它执行target(即run)中指定的方法。一旦完成,它将自动退出。

您可以通过检查运行过程来检查这一点,例如在linux use命令中,

"ps -aux |grep python" or "ps -aux |grep "program_name.py"

当你的目标运行时,计数会更多。

要等到进程完成其工作并退出,请使用join()方法。但在你的情况下,它不是必需的

更多示例在这里:https://pymotw.com/2/multiprocessing/basics.html

答案 1 :(得分:0)

好吧,当你没有做太多的计算时,GIL不是一个大问题,但是当程序的执行被挂起并且控制流被给予krnel时会执行网络内容或读取文件,直到输入/输出操作。然后另一个线程可以在python中运行。

如果你因为更多耗费CPU的东西而烦恼,你实际应该去进行多处理。

join()方法用于线程同步,因此当主线程依赖于另一个线程处理的数据时,使用它是很重要的。否则就不是。您的操作系统将处理诸如以安全方式关闭子进程之类的事情。

编辑:check this discussion了解更多详情。