请原谅我,因为我是新手,在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
提前感谢您提供的任何帮助。