我是Python中多处理的新手,所以我有点怀疑。我的第一个想法是使用线程,但后来我读到了GIL并转向了多处理。
我的问题是,当我开始这样的过程时:
t1 = Process(target=run, args=lot)
t1.start()
我是否需要以某种方式从主进程停止它,或者在 run()方法完成时它们会关闭?
我知道像 join()这样的东西存在,但是我每隔 n 分钟安排一个作业并且并行启动几个进程,这个程序一直持续到停止,所以我真的不需要等待进程完成。
答案 0 :(得分:0)
是的,当t1.start()发生时,它执行target(即run)中指定的方法。一旦完成,它将自动退出。
您可以通过检查运行过程来检查这一点,例如在linux use命令中,
"ps -aux |grep python" or "ps -aux |grep "program_name.py"
当你的目标运行时,计数会更多。
要等到进程完成其工作并退出,请使用join()方法。但在你的情况下,它不是必需的
答案 1 :(得分:0)
好吧,当你没有做太多的计算时,GIL不是一个大问题,但是当程序的执行被挂起并且控制流被给予krnel时会执行网络内容或读取文件,直到输入/输出操作。然后另一个线程可以在python中运行。
如果你因为更多耗费CPU的东西而烦恼,你实际应该去进行多处理。
join()
方法用于线程同步,因此当主线程依赖于另一个线程处理的数据时,使用它是很重要的。否则就不是。您的操作系统将处理诸如以安全方式关闭子进程之类的事情。
编辑:check this discussion了解更多详情。