叉子两次打印最后一条记录

时间:2019-04-13 00:18:13

标签: python multithreading

下面的代码连接到数据库,对于它找到的每条记录,它应该打印一个子进程。现在,数据库中只有两条记录。它先打印第一个,然后第二个打印两次。看着“作品”,它会打印出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)

1 个答案:

答案 0 :(得分:0)

除非您在exit()之前删除了cursor.close()呼叫,否则我不会得到您在问题中提到的印刷品。我还需要删除cursor.close()。到那时,我会得到您描述的行为。

请记住,os.fork()创建一个重复的进程(子进程),并继续原始进程(父进程)。父进程执行两次for循环(两个记录中的每个记录一次),因此您将获得“ 1”和“ 2”输出。同时,子进程执行for循环的第二次迭代(第一次迭代已在os.fork()之前执行)并打印第二个'2'。

换句话说,循环的第一次迭代是由父进程在os.fork()之前执行的。 for循环的第二次迭代由父进程和子进程执行。