python析构函数有哪些_Python 类的析构函数行为非常奇怪

首先定义一个类,作用是获取代理

class Proxies:

def __init__(self):

self.bin_file = Path(__name__).resolve().parent / 'deque.bin'

if self.bin_file.exists():

with open(self.bin_file.as_posix(), 'rb') as fpr:

self.qproxy = pickle.load(fpr)

print('deque loaded')

else:

self.qproxy = deque()

print('deque created')

self.get_ip = "API"

self.get_proxies()

def __del__(self):

with open(self.bin_file.as_posix(), 'wb') as fpw:

pickle.dump(self.qproxy, fpw)

print('deque dumped')

def get_proxies(self):

logging.info("Getting proxies from API.")

with HTMLSession() as ip_session:

with ip_session.get(self.get_ip) as resp_ip:

resp_ip2 = resp_ip.text.split('\r\n')

proxies_http = [{"http": "http://{}".format(i), "cd": 3

} for i in resp_ip2 if i is not None]

proxies_https = [{"https": "https://{}".format(i), "cd": 3

} for i in resp_ip2 if i is not None]

[self.put(p) for p in proxies_http]

[self.put(ps) for ps in proxies_https]

logging.info("Proxies get.")

def get(self):

if len(self.qproxy) <= 1:

self.get_proxies()

return self.qproxy.popleft()

def put(self, p):

self.qproxy.append(p)

return None

@property

def size(self):

return len(self.qproxy)

在此之前我已经创建一个实例

p = Proxies()

然后打印出了 deque created 没说明 bin 文件已经被创建,创建后实例获取了 40 个代理

然后执行

del p

然而此时 deque dumped 没有被打印出来,也就是析构函数没有被执行

然后从新创建一个实例

p = Proxies()

输出

deque loaded

deque dumped

deque dumped 在此时打印了出来,这是为什么?

此时 p.size 为 40,这是正确的

然后手动获取代理

p.get_proxies()

输出

deque dumped

此时为什么又输出了析构函数中的 print ?

p.size

输出 80,这个也是正确的

del p

输出 deque dumped

此时析构函数又正常执行了。。。。

python 版本 3.7

谁能给分析分析是为什么吗

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值