多处理不会产生新进程

时间:2011-08-09 23:50:19

标签: python multiprocessing

Windows 7 x86上的Python 3.2.1中的多处理模块似乎在打败我。

我有两个模块:servmain.py和sslserver.py。这个想法是(最终)编写一个应用程序,它将使用SSL与客户端进行通信。这是我已经失去的部分。但是,我需要将服务器侦听器分离到其自己的单独进程中,以便主进程可以执行其他一些操作。作为一个虚拟测试,我告诉子进程将“Hello World”打印到stdout并将文本写入不存在的文本文件。

以下是我的父进程(servmain.py)的代码:

from multiprocessing import Process
import logging

if __name__ == "__main__":
    logger = multiprocessing.log_to_stderr()
    logger.setLevel(logging.DEBUG)

    #Fire up the server


    listenerProcess = Process(target = sslserver.startServer)
    listenerProcess.start()
    logger.debug("Starting listener.")
    listenerProcess.join()
    logger.debug("Done.")

这是sslserver.py代码:

def startServer():
    print("Hello World")
    f= open("testfile.txt", "w")
    f.write("Hello world\n")
    f.close()

当我运行servmain.py时,我得到以下输出:

  

[DEBUG / MainProcess]启动侦听器。 [DEBUG / MainProcess]完成。

这是我所期待的。但是,尚未创建testfile.txt,并且没有输出到stdout。有没有人知道为什么会这样?

1 个答案:

答案 0 :(得分:1)

我想我在这里缺少一些库,所以我不得不删除你的记录器代码,因为这对我来说是一个问题。对我来说,似乎你有一个命名/路径冲突。请确保名称'sslserver'不会与python路径中的任何模块发生冲突。

另外,设置python路径!在我的示例中,这两个文件都在同一目录中。

pytest.py

#!/usr/bin/env python
from multiprocessing import Process
import sslserver
import logging
if __name__ == "__main__":
    #logger = multiprocessing.log_to_stderr()
    #logger.setLevel(logging.DEBUG)

    #Fire up the server


    listenerProcess = Process(target = sslserver.startServer)
    listenerProcess.start()
    #logger.debug("Starting listener.")
    print "Starting Listener\n"
    listenerProcess.join()
    #logger.debug("Done.")
    print "Done\n";

sslserver.py

#!/usr/bin/env python

def startServer():
    print("Hello World")
    f= open("testfile.txt", "w")
    f.write("Hello world\n")
    f.close()

输出

nynex@citadel:~/temp$ ./pytest.py 
Starting Listener

Hello World
Done

nynex@citadel:~/temp$ cat testfile.txt 
Hello world