我的问题发生在这个设置上:
- 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应用程序中的断点是有效的,调试器显示线程。