Python在Windows上的多进程处理

4

我正在尝试Python文档中列出的示例,http://docs.python.org/library/multiprocessing.html,特别是以下两个适用于Windows的示例:

1)

from multiprocessing import Process

def f(name):
    print 'hello', name

if __name__ == '__main__':
    p = Process(target=f, args=('bob',))
    p.start()
    p.join()

2)

from multiprocessing import Process
import os

def info(title):
    print title
    print 'module name:', __name__
    print 'parent process:', os.getppid()
    print 'process id:', os.getpid()

def f(name):
    info('function f')
    print 'hello', name

if __name__ == '__main__':
    info('main line')
    p = Process(target=f, args=('bob',))
    p.start()
    p.join()

问题在于:我没有从子进程中得到任何输出。在Linux上可以正常工作,但是发生了什么?


我建议你进行异常处理。这将使我们更清晰! - King
除了父进程中的os.getppid之外,我没有收到任何异常。如果我删除它,我只会得到父进程的输出,而子进程什么也不打印。 - Bruce
1个回答

2

例子1运行良好。(我希望你将程序保存在文件中,然后再执行它,否则它将根本无法识别函数f。)

如果您想要父进程的ID,例子2将无法工作。在Windows中没有getppid。

只需使用print os.getppid并执行,它仍然很棒!

请参考Doug的更多内容。(更新:原链接不起作用,这里有类似的东西。)


我把它保存在一个文件中。你用的是哪个版本的Python? - Bruce
2.6.5。但是,除非您的版本不是2.6或更高版本,否则这并不重要。因为它是2.6的新功能。 - King
1
幸运的是,我们有Doug为您处理!http://www.doughellmann.com/PyMOTW/multiprocessing/basics.html - King

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接