安装python-binance后Python脚本随机卡在cryptography导入阶段求助
解决cryptography模块导入随机卡顿的问题
根据你描述的情况,这个卡顿问题大概率和cryptography库的scrypt模块导入时的底层操作有关,结合你的环境和已经排查过的点,给你几个针对性的解决方案:
1. 检查并补充系统熵池(最可能的根因)
Ubuntu 18.04的虚拟机或云服务器经常会遇到系统熵池不足的问题:cryptography的scrypt模块在初始化时需要高质量的随机数,当系统熵池耗尽时,getrandom()调用会阻塞,直到有足够的熵生成——这就会导致你看到的几分钟卡顿(此时CPU使用率低是因为进程在等待熵,而非进行计算)。
解决步骤:
- 安装rng-tools工具补充熵池:
sudo apt update && sudo apt install rng-tools - 启动并设置开机自启:
sudo systemctl start rng-tools sudo systemctl enable rng-tools - 验证熵池状态(正常数值应在1000以上):
cat /proc/sys/kernel/random/entropy_avail
2. 升级老旧的依赖版本
你使用的python-binance==0.7.1是2019年的旧版本,对应的cryptography版本必然也比较陈旧,旧版本的cryptography在导入scrypt模块时可能存在阻塞类的bug。
解决步骤:
- 先卸载旧版本依赖:
pip3 uninstall -y python-binance cryptography - 安装最新兼容版本:
新版本的cryptography优化了导入流程,修复了不少底层阻塞问题。pip3 install python-binance cryptography --upgrade
3. 确保cryptography安装了编译后的C扩展
从你的调试日志能看到,Python先尝试加载.so格式的编译扩展,失败后才使用纯Python版本的scrypt.py——纯Python版本不仅运行效率低,还可能在并发场景下出现阻塞。
解决步骤:
- 安装编译cryptography所需的系统依赖:
sudo apt install build-essential libssl-dev libffi-dev python3-dev - 强制从源码编译安装cryptography:
这会生成对应的pip3 install cryptography --force-reinstall --no-binary cryptography.so扩展文件,确保导入时使用高效的编译版本。
4. 错开crontab脚本的执行时机
你有多个脚本每分钟同时启动,可能导致多个进程同时竞争导入cryptography的资源(比如文件锁)。可以给每个脚本添加几秒延迟,避免并发启动:
比如把原来的* * * * * python3 /path/to/script.py改成:
* * * * * sleep 2 && python3 /path/to/script1.py * * * * * sleep 5 && python3 /path/to/script2.py
内容的提问来源于stack exchange,提问作者TaTo
相关产品推荐
相关产品推荐

