Answers:
真正的多处理Python程序(与必须处理可怕的GIL的多线程 Python程序相反)与任何其他语言都没有什么不同。它们都有相同的基本挑战:
尽管有一些开发方法试图避免上述每一个问题,但最终您还是需要真正考虑自己在做什么。我建议进行繁重的压力测试-远远超出您在现实生活中可能想到的任何事情-因此,与在主要演示过程中或在生产过程中相比,您很有可能会遇到机会之窗并在开发中大放异彩。
我们曾经使用带有微秒级时间戳的日志文件,然后创建了一个颜色编码的日志查看应用程序,因此我们可以尝试可视化M处理器上运行的N个进程之间发生的情况。我们还尝试(并且大部分成功)创建了一个系统,该系统可以删除日志文件以重新创建崩溃的上下文。
但是最好的工具是良好的设计和真正邪恶,讨厌的人,他们试图将您的应用程序从水中吹走。(嗨,dbell!)
我发现非常有用的一件事是使用multiprocessing
模块中的现有记录器。在您的主要代码中尝试以下操作:
import multiprocessing, logging
mpl = multiprocessing.log_to_stderr()
mpl.setLevel(logging.INFO)
另请参阅:http : //docs.python.org/library/multiprocessing.html#logging
此外,您可以使用以下命令访问当前进程名称:
cpname = multiprocessing.current_process().name
# print cpname
mylogger.info("{0} is currently doing...".format(cpname))
请参阅:http : //docs.python.org/library/multiprocessing.html#multiprocessing.current_process
除此之外,除了标准调试方法(如pdb
&co)外,我什么都不知道。