我使用的是python;我试图关闭一个通过ThreadPoolExecutor运行的函数,但关机崩溃并返回以下错误:
libgcc_s.so.1 must be installed for pthread_cancel to work
该函数的提交方式为:
record_future = self.executor.submit(next,primitive)
primitive
是一个迭代器,通常返回值,但在某些情况下,它需要等待一段时间才能返回值(因为长时间的计算等)。在这些情况下,当我需要关闭正在运行的线程时,我不能等待迭代器完成返回,而需要立即关闭它。我是这样做的:
executor.shutdown(wait=False)
但是,当执行到这一步时,我得到了libgcc错误。
我试着通过手动安装来“解决”这个问题:
apt-get install libgcc1:amd64
但没有骰子。我不确定python到底在哪里查找这个库,否则我会尝试创建一个符号链接,因为这个库已经安装在:
$ /sbin/ldconfig -p | grep libgcc
libgcc_s.so.1 (libc6,x32) => /usr/libx32/libgcc_s.so.1
libgcc_s.so.1 (libc6,x86-64) => /lib/x86_64-linux-gnu/libgcc_s.so.1
libgcc_s.so.1 (libc6) => /usr/lib32/libgcc_s.so.1
发布于 2021-01-26 19:58:51
我在Python mailing list中找到了一个潜在的解决方法,可以通过ctypes
显式加载libgcc_.so.1
,如下所示:
import ctypes
libgcc_s = ctypes.CDLL('libgcc_s.so.1')
必须确保在创建任何线程之前加载该变量,并确保变量libgcc_s
一直持续到所有线程关闭(即将其放在文件的开头)。
发布于 2021-01-17 16:27:32
你使用的是Python 3.7还是3.8?
我使用我的Anaconda Python3.8在Python的sounddevice
中也遇到了这个错误,但是使用我的Anaconda Python3.7不会发生这个错误。我已经在谷歌搜索中测试了所有的变通方法,并确保所有相关的包和库都是相同的版本,但它仍然不起作用。我最后的猜测是Python 3.8与3.7版本的差异。尽管情况可能并非如此,^_^
https://stackoverflow.com/questions/64797838
复制