我的问题出在这个设置上:
最重要的是,它发生在我使用 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)
我现在可以忽略控制台中的大量打印,但这并不是很方便。如果有人有想法摆脱那些......
该错误的解决方案是修改文件 /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
然后你可以运行sh脚本,它将替换
attach_x86_64.dylib
文件。
注意。如果您更新 pycharm,此更改将丢失。
仅当我将 pycharm 更新为较新版本时,我才在我的 Mac M1 16" (2021) 上遇到了同样的问题。 如果您在 Mac M1 笔记本电脑上遇到此问题。请使用笔记本电脑前往此位置
/Applications/PyCharm CE.app/Contents/plugins/python-ce/helpers/pydev/pydevd_attach_to_process/linux_and_mac/compile_mac.sh
并将这些行添加到具有现有行的
compile_mac.sh
文件中。
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.jetbrains.com
我不知道它是否会完全起作用,但我想我找到了解决此错误的方法。首先,你需要在文件
_PyObject_FastCallDict
中将动态加载函数的名称PyObject_VectorcallDict
更改为/Applications/PyCharm.app/Contents/plugins/python/helpers/pydev/pydevd/attach_to_process/common/py_utils.hpp
。你应该更换字符串
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 应用程序中的断点有效并且调试器显示线程。