正如Piotr所说,PyCharm'在调试时自动附加到子进程'。如果subprocess是Python进程,PyCharm调试器会更改进程的启动参数(请参阅函数 patch_args 在 资源 )。以这种方式启动子进程时:
patch_args
args = ['python', '-m', 'pycharm-multiprocess-debug', 'worker'] worker = subprocess.Popen(args)
实际的启动命令如下:
python.exe -m "C:\Program Files (x86)\JetBrains\PyCharm Community Edition 4.0.3\helpers\pydev\pydevd.py" --multiproc --client 127.0.0.1 --port 62661 --file pycharm-multiprocess-debug
所以它出了问题。我可以找到几种解决方法:
最简单的方法,如果您不需要调试子进程,只需在PyCharm设置中关闭“在调试时自动附加到子进程”
将你的args改为:
args = ['python', '__main__.py', 'worker']
缺点是您只能运行Python文件,而不能运行Python模块。
我推荐Python子进程的最后一个解决方案:
from multiprocessing import Process def server(): p = Process(target=worker) p.start() print 'worker pid: {}'.format(p.pid) p.join()