使用多处理池时的Pycharm调试器



我的问题发生在这个设置上:

  • Pycharm 2020.3 pro
  • 多处理.池
  • Macbook pro 2020(M1(
  • Conda python 3.8

最重要的是,当我使用pycharm的调试器时,会发生这种情况。

它在控制台中显示8次(进程数(:
Error loading: /Applications/PyCharm.app/Contents/plugins/python/helpers/pydev/pydevd_attach_to_process/attach_x86_64.dylib

每个过程都被执行。结果是正确的。我可以用htop命令看到它们。所以这只是一个调试器故障,并不会真正影响代码执行(如果我错了,请纠正我(。

这是我运行的代码类型:

def func(x):
return x+10

if __name__ == '__main__':
poo = Pool()
x = [[i] for i in range(10)]
res = poo.starmap(func, x)
print(res)

我现在可以忽略控制台中的大量打印,但这并不方便。如果有人想摆脱这些。。。

这听起来像是JetBrains开发人员需要为M1解决的问题(考虑给他们一个错误报告(。与此同时,我怀疑你可以在以下选项下禁用它:

PyCharm>首选项>构建、执行、部署>Python调试器

并且取消复选框">调试时自动附加到子流程";。请参阅相关文档以供参考。

该错误的解决方案是修改文件/Applications/PyCharm.app/Contents/plugins/python/helpers/pydev/ydevd_attach_to_process/linux_and_mac/compile_mac.sh,并替换下一个文件的所有代码:

g++ -fPIC -D_REENTRANT -std=c++11 -arch arm64 -c -o attach_x86_64.o attach.cpp
g++ -dynamiclib -nostartfiles -arch arm64 -o attach_x86_64.dylib attach_x86_64.o -lc
rm attach_x86_64.o
mv attach_x86_64.dylib ../attach_x86_64.dylib

然后可以运行sh脚本,该脚本将替换attach_x86_64.dylib文件。

注意。如果您更新您的pycharm,此更改将丢失。

我在Mac M1 16上遇到了同样的问题"(2021(只有当我为新版本更新pycharm时。如果你在Mac M1笔记本电脑上遇到这个问题。请使用您的笔记本电脑前往此位置

/Applications/PyCharm CE.app/Contents/plugins/python-ce/helpers/pydev/pydevd_attach_to_process/linux_and_mac/compile_mac.sh

并将CCD_ 4文件中的这些行与现有行相加。

g++ -fPIC -D_REENTRANT -std=c++11 -arch arm64 -c -o attach_arm64.o attach.cpp
g++ -dynamiclib -nostartfiles -arch arm64 -o attach_arm64.dylib attach_arm64.o -lc
rm attach_arm64.o
mv attach_arm64.dylib ../attach_arm64.dylib

我发现这个链接对解决这个问题很有用:youtrack.getbrains.com

我不知道它能完全工作吗,但我想我找到了修复这个错误的方法。首先,您需要在文件/Applications/PyCharm.app/Contents/plugins/python/helpers/pydev/pydevd/attach_to_process/common/py_utils.hpp中将动态加载函数_PyObject_FastCallDict的名称更改为PyObject_VectorcallDict。您应该替换字符串

DEFINE_PROC(pyObject_FastCallDict, _PyObject_FastCallDict*, "_PyObject_FastCallDict", 530);

在上

DEFINE_PROC(pyObject_FastCallDict, _PyObject_FastCallDict*, "PyObject_VectorcallDict", 530);

然后您应该将文件/Applications/PyCharm.app/Contents/plugins/python/helpers/pydev/pydevd_attach_to_process/linux_and_mac/compile_mac.sh的内容替换为以下内容:

g++ -fPIC -D_REENTRANT -std=c++11 -arch arm64 -c -o attach_x86_64.o attach.cpp
g++ -dynamiclib -nostartfiles -arch arm64 -o attach_x86_64.dylib attach_x86_64.o -lc
rm attach_x86_64.o
mv attach_x86_64.dylib ../attach_x86_64.dylib

脚本执行后,attach_arm64.dylib成功工作,pydev没有显示错误消息。我并没有尝试所有的情况,但FastApi应用程序中的断点是有效的,调试器显示线程。

最新更新