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 |