关于python:多处理不产生新进程

multiprocessing not spawning new processes

在Windows7X86上,python 3.2.1中的多处理模块似乎打败了我。

我有两个模块:servmain.py和sslserver.py。其思想是(最终)编写一个应用程序代码,该应用程序将使用SSL与客户机通信。这是我已经放下的部分。但是,我需要将服务器侦听器分离成它自己的独立进程,这样主进程就可以做其他的事情。作为一个虚拟测试,我告诉子进程将"hello world"打印到stdout,并将文本写入一个不存在的文本文件。

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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代码:

1
2
3
4
5
6
def startServer():
    print("Hello World")
    f= open("testfile.txt","w")
    f.write("Hello world
"
)
    f.close()

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

[DEBUG/MainProcess] Starting listener. [DEBUG/MainProcess] Done.

这就是我所期望的。但是,尚未创建testfile.txt,并且没有输出到stdout。有人知道为什么会发生这种情况吗?


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

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

PyTest.Py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/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
"

    listenerProcess.join()
    #logger.debug("Done.")
    print"Done
"
;

SsServ.Py

1
2
3
4
5
6
7
8
#!/usr/bin/env python

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

产量

1
2
3
4
5
6
7
8
nynex@citadel:~/temp$ ./pytest.py
Starting Listener

Hello World
Done

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