当只指定了1个进程时,为什么看起来像是在使用多个进程?

时间:2016-02-26 23:06:01

标签: python python-2.7 multiprocessing

请原谅我,因为我是新手,在python中使用多处理库,而新用于测试多进程/多线程项目。

在某些遗留代码中,有人创建了一个进程池来并行执行多个进程。我试图通过使池只有1个进程来调试代码,但输出看起来仍然使用多个进程。

下面是一些已清理的示例代码。希望我把所有重要的元素都包含在演示我正在经历的内容中。

def myTestFunc():
   pool = multiprocessing.Pool(1)  # should only use 1 process
   for i in someListOfNames:
      pool.apply_async(method1, args=(listA))

def method1(listA):
   for i in listA:
      print "this is the value of i: " + i
      sys.stdout.flush()

发生的事情是因为我预计池中应该只有1个进程,所以不应该有任何输出冲突。我在log msgs中有时会看到的是:

this is the value of i: Alpha
this is the value of i: Bravo
this is the this is the value of i: Mike   # seems like 2 things trying to write at the same time

同时写两件事看起来似乎更靠近调试日志的底部,而不是顶部,这意味着我运行的时间越长,我就越有可能让这些msgs相互覆盖。虽然我还没有用更短的列表进行测试。

我意识到测试多进程/多线程程序很困难,但在这种情况下,我认为我已经限制它,以便它比正常测试要容易得多。我很困惑为什么会这样发生b / c

  1. 我将池设置为只有一个进程
  2. (我认为)我强制进程刷新其写入缓冲区,因此它应该在没有等待/排队的情况下编写并得到这种情况。
  3. 提前感谢您提供的任何帮助。

0 个答案:

没有答案