一般發生在程式開始部分: `from pymodbus.client.sync import ModbusSerialClient` `from pymodbus.payload import BinaryPayloadDecoder` `from pymodbus.constants 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):對於不需要持有對象所有權的引用,可以使用弱引用來避免迴圈引用。弱引用不會增加對象的引用計數,而且在對象被回收時,弱引用會自動失效。
重新設計數據結構:如果出現迴圈引用問題,可能需要重新設計數據結構,以避免對象之間的相互引用關係。