Iva*_*mov 15 python multiprocessing pycharm
我正在尝试调试使用psutil.Popen对象的Python应用程序.当我启动子进程时,PyCharm用以下代码替换我的命令行:
python -m pydevd.py --multiproc --client 127.0.0.1 --port 52581 --file <myapplication>
Run Code Online (Sandbox Code Playgroud)
最终出现错误:
python.exe: Import by filename is not supported.
Run Code Online (Sandbox Code Playgroud)
当我没有-m
选项启动相同的命令时,一切似乎都没问题.有没有办法可以改变PyCharm的调试器启动命令?
我已更新到PyCharm Community Edition 4.0.3,新的调试器命令如下所示:
python.exe "C:\Program Files (x86)\JetBrains\PyCharm Community Edition 4.0.3\helpers\pydev\pydevd.py"
--multiproc --client 127.0.0.1 --port 62661
--file __main__.py local -c local.yml -f input/11_12.xls
Run Code Online (Sandbox Code Playgroud)
where -c
和-f
是我的模块的命令行参数.调试器启动命令已更改,但它没有解决问题; 我仍然得到Import by filename is not supported
错误.
Bitbucket.org提供了一个代码示例.Pycharm的运行配置应如下所示:
Script: __main__.py
Script parameters: server
Working directory: %path to the repository%
Run Code Online (Sandbox Code Playgroud)
ZZY*_*ZZY 13
正如Piotr所说,PyCharm'在调试时自动附加到子进程'.如果子是一个Python程序,PyCharm调试程序改变进程的启动参数(见函数patch_args
的源).以这种方式启动子进程时:
args = ['python',
'-m', 'pycharm-multiprocess-debug',
'worker']
worker = subprocess.Popen(args)
Run Code Online (Sandbox Code Playgroud)
实际的启动命令如下:
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
Run Code Online (Sandbox Code Playgroud)
所以它出了问题.我可以找到几种解决方法:
最简单的方法,如果您不需要调试子进程,只需在PyCharm设置中关闭"在调试时自动附加到子进程"
将你的args改为:
args = ['python', '__main__.py', 'worker']
Run Code Online (Sandbox Code Playgroud)
缺点是您只能运行Python文件,而不能运行Python模块.
我推荐Python子进程的最后一个解决方案:
from multiprocessing import Process
def server():
p = Process(target=worker)
p.start()
print 'worker pid: {}'.format(p.pid)
p.join()
Run Code Online (Sandbox Code Playgroud) 归档时间: |
|
查看次数: |
6751 次 |
最近记录: |