一般發生在程式開始部分:
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):對于不需要持有物件所有權的參考,可以使用弱參考來避免回圈參考,弱參考不會增加物件的參考計數,而且在物件被回收時,弱參考會自動失效,
重新設計資料結構:如果出現回圈參考問題,可能需要重新設計資料結構,以避免物件之間的相互參考關系,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/556693.html
標籤:其他
上一篇:Java 構造器
下一篇:返回列表