必须安装 libgcc_s.so.1 才能使 pthread_cancel 工作

asu*_*rem 7 python threadpool threadpoolexecutor

我用的是蟒蛇;我试图关闭通过 ThreadPoolExecutor 运行的函数,但关闭崩溃并出现错误:

libgcc_s.so.1 must be installed for pthread_cancel to work
Run Code Online (Sandbox Code Playgroud)

该函数通过以下方式提交:

record_future = self.executor.submit(next,primitive)
Run Code Online (Sandbox Code Playgroud)

primitive是一个迭代器,通常返回一个值,但在某些情况下,它需要等待一段时间才能返回值(因为计算时间长等)。在这些情况下,当我需要关闭正在运行的线程时,我不能等待迭代器完成返回,而需要立即将其关闭。我用以下方法做到了:

executor.shutdown(wait=False)
Run Code Online (Sandbox Code Playgroud)

但是,当执行到这里时,我收到 libgcc 错误。

我尝试通过手动安装来“解决”它:

apt-get install libgcc1:amd64
Run Code Online (Sandbox Code Playgroud)

但没有骰子。我不确定 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
Run Code Online (Sandbox Code Playgroud)

col*_*onz 14

我在Python 邮件列表libgcc_.so.1中找到了一个潜在的解决方法,可以通过以下方式显式加载ctypes

import ctypes
libgcc_s = ctypes.CDLL('libgcc_s.so.1')
Run Code Online (Sandbox Code Playgroud)

必须确保在创建任何线程之前加载该变量,并且该变量libgcc_s持续到所有线程关闭为止(即将其放在文件的开头)。