首页 > 编程语言 >python:导入库、模块失败

python:导入库、模块失败

时间:2023-07-06 23:00:11浏览次数:34  
标签:pymodbus python 对象 老库 循环 引用 模块 import 入库

一般发生在程序开始部分:
from pymodbus.client.sync import ModbusSerialClient
from pymodbus.payload import BinaryPayloadDecoder
from pymodbus.constants import Endian
from pymodbus.compat import iteritems
import time
import threading
import json
from device import Device
比如这一堆,运行时可能报错如下:
Traceback (most recent call last):
File "/home/pi/Car/sensor.py", line 87, in <module>
sensor = Sensor(device_id, queue_name)
File "/home/pi/Car/sensor.py", line 19, in __init__
self.client = ModbusSerialClient(
NameError: name 'ModbusSerialClient' is not defined
两种情况:
1.库更新了,你目前装的库里方法失效了,你的代码走的是老库的
2.循环引用了,Python中循环应用的情况就是程序分级不清晰,会导致如下问题:
内存泄漏:由于循环引用,对象无法被垃圾回收器正确地释放。即使这些对象不再被程序使用,它们仍然无法被回收,从而占用了内存空间,导致内存泄漏问题。
引用计数错误:Python 中使用引用计数来管理对象的生命周期,在循环引用情况下,引用计数的增加和减少会出现问题。对象之间持续相互引用时,它们的引用计数不会变为零,导致无法正确地释放内存。
程序性能下降:循环引用可能导致 Python 解释器在处理对象时出现性能下降。由于需要额外的开销来管理循环引用,垃圾回收器需要更多的时间和资源来解决循环引用的问题,从而降低了程序的性能。
针对以上两种情况:
1.更新库,
pip3 install pymodbus==2.5.5
这就是将库版本回溯到以前的老库版本了,不过有时候老库的资源被删除了,要么找离老库最近的版本,要么更新程序代码。
2.显式地将引用设置为 None:在不再需要对象之间的引用关系时,可以显式地将其设置为 None,以断开循环引用。
使用弱引用(Weak Reference):对于不需要持有对象所有权的引用,可以使用弱引用来避免循环引用。弱引用不会增加对象的引用计数,而且在对象被回收时,弱引用会自动失效。
重新设计数据结构:如果出现循环引用问题,可能需要重新设计数据结构,以避免对象之间的相互引用关系。

标签:pymodbus,python,对象,老库,循环,引用,模块,import,入库
From: https://www.cnblogs.com/Xuuio/p/17533581.html

相关文章

  • Qt+opencv dnn模块调用tensorflow模型
    参考网址(1条消息)Qt+opencvdnn模块调用tensorflow模型_vsqt调用tensorflow_街道口扛把子的博客-CSDN博客代码地址:GitHub-Whu-wxy/Simple_Qt_opencv_dnn:UsingdeeplearningmodelwithopencvinQt修改运行后的代码如下:#include<QCoreApplication>#include<opencv2\o......
  • SRGAN图像超分重建算法Python实现(含数据集代码)
    摘要:本文介绍深度学习的SRGAN图像超分重建算法,使用Python以及Pytorch框架实现,包含完整训练、测试代码,以及训练数据集文件。博文介绍图像超分算法的原理,包括生成对抗网络和SRGAN模型原理和实现的代码,同时结合具体内容进行解释说明,完整代码资源文件请转至文末的下载链接。完整......
  • python: using pdfplumber Lib read pdf file
     fromopenpyxlimportWorkbookfromopenpyxl.stylesimportPatternFill,Side,Borderimportpdfplumberl=[]defvisitDir(path):ifnotos.path.isdir(path):print('Error:"',path,'"isnotadirectoryordoesnotexi......
  • python列表(一)
    列表由一系列按特定顺序排列的元素组成。bicycles=['trek','cannondale','redline','specialized']print(bicycles)1.访问列表元素#索引print(bicycles[0])#最后一个元素print(bicycles[-1])#倒数第二个元素print(bicycles[-2])2.修改、添加和删除元素2.1......
  • python基础day39 生产者消费者模型和线程相关
    如何查看进程的id号进程都有几个属性:进程名、进程id号(pid--->processid)每个进程都有一个唯一的id号,通过这个id号就能找到这个进程importosimporttimedeftask():print("task中的子进程号:",os.getpid())print("主进程中的进程号:",os.getppid())#parent......
  • 多线程python
    如何开启进程使用的是内置的模块:multiprocessfrommultiprocessingimportProcessdeftask():withopen('a.txt','w',encoding="utf8")asf:f.write('helloworld')#开一个进程来执行task这个任务#如何开进程"""在Wind......
  • Logistic回归模型,python
    代码参考https://blog.csdn.net/DL11007/article/details/129204192?ops_request_misc=&request_id=&biz_id=102&utm_term=logistic%E6%A8%A1%E5%9E%8Bpython&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-1-129204192.142^v......
  • Python中标准输入(stdin)、标准输出(stdout)、标准错误(stdout)的用法
    1.标准输入input()、raw_input()Python3.x中input()函数可以实现提示输入,python2.x中要使用raw_input(),例如:foo=input("Enter:")#python2.x要用raw_input()print("Youinput:[%s]"%(foo))#测试执行Enter:abcdeYouinput:[abcde]#读取一行(不......
  • Python中os.system()、subprocess.run()、call()、check_output()的用法
    1.os.system()os.system()是对C语言中system()系统函数的封装,允许执行一条命令,并返回退出码(exitcode),命令输出的内容会直接打印到屏幕上,无法直接获取。示例:#test.pyimportosos.system("ls-l|greptest")#允许管道符#测试执行$ll<=======......
  • Python中startswith()和endswith()方法
    startswith()方法startswith()方法用于检索字符串是否以指定字符串开头,如果是返回True;反之返回False。endswith()方法endswith()方法用于检索字符串是否以指定字符串结尾,如果是则返回True;反之则返回Falses='helloword'print("s.startswith('wor'):",s.startswith('wor......