Alw*_*ver 10 python parallel-processing
[代码取自Mark Lutz编程Python第4版]
"forks child processes until you type 'q'"
import os
def child():
print('Hello from child', os.getpid())
os._exit(0) # else goes back to parent loop
def parent():
while True:
newpid = os.fork()
if newpid == 0:
child()
else:
print('Hello from parent', os.getpid(), newpid)
if input() == 'q': break
parent()
Run Code Online (Sandbox Code Playgroud)
运行时代码输出的内容:
Hello from parent 2057 2062
Hello from child 2062
Hello from parent 2057 2068
Hello from child 2068
Hello from parent 2057 2069
Hello from child 2069
Hello from parent 2057 2070
Hello from child 2070
q
Run Code Online (Sandbox Code Playgroud)
我理解的事情:
os.fork() 用于与当前进程并行启动另一个进程.os.fork() 创建上一个Python会话的副本并并行打开它.os.fork() 返回新进程的id.我不明白的事情:
os.getpid()代码运行时永远不会改变它的值?child()调用这个函数?假设newpid!= 0 的值,那么程序将打印出来print('Hello from parent', os.getpid(), newpid).但是,在那之后,它会打印来自child的行而不是请求输入,因为case在if语句之后.os._exit(0)做什么?非常感谢你的时间.:)
1:为什么代码运行时os.getpid()的值永远不会改变?
os.getpid()父项的值永远不会改变,因为它始终是相同的过程.由于fork()始终使用自己的PID创建一个全新的子进程克隆,因此pid将每次为子进行更改.
2:为什么调用child()函数?假设newpid!= 0的值,那么程序将打印出print('Hello from parent',os.getpid(),newpid).但是,在那之后,它会打印来自child的行而不是请求输入,因为case在if语句之后.
调用子进程是因为现在有两个进程在运行.一个称为child()函数,另一个称为print函数.他们只是打算在屏幕上打印,你在这种情况下首先看到父打印"胜利".
3:os._exit(0)在做什么?
请参见:https://docs.python.org/2/library/os.html#os._exit
退出状态为n的进程,不调用清理处理程序,刷新stdio缓冲区等.
| 归档时间: |
|
| 查看次数: |
11715 次 |
| 最近记录: |