下面的代码连接到数据库,对于它找到的每条记录,它应该打印一个子进程。现在,数据库中只有两条记录。它先打印第一个,然后第二个打印两次。看着“作品”,它会打印出1,2,2。
不知道为什么会这样,请帮忙。
for row in records:
id = str(row[0])
phone = str(row[1])
print work
work = work + 1
pid = os.fork()
if (pid == 0):
#time.sleep(1)
#print "Child process " + str(os.getpid()) + str(row[1])
print "Child process " + str(row[1])
exit()
cursor.close()
#exit()
#cursor.close()
#exit()
print "Parent process -- Child is " + str(pid)
答案 0 :(得分:0)
除非您在exit()
之前删除了cursor.close()
呼叫,否则我不会得到您在问题中提到的印刷品。我还需要删除cursor.close()
。到那时,我会得到您描述的行为。
请记住,os.fork()
创建一个重复的进程(子进程),并继续原始进程(父进程)。父进程执行两次for
循环(两个记录中的每个记录一次),因此您将获得“ 1”和“ 2”输出。同时,子进程执行for
循环的第二次迭代(第一次迭代已在os.fork()
之前执行)并打印第二个'2'。
换句话说,循环的第一次迭代是由父进程在os.fork()
之前执行的。 for
循环的第二次迭代由父进程和子进程执行。