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。有没有人知道为什么会这样?
答案 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