gpt4 book ai didi

python - 对象销毁和过程

转载 作者:太空宇宙 更新时间:2023-11-03 18:29:52 26 4
gpt4 key购买 nike

所以我为 Web API 编写了一个包装器 WebApiSession。创建实例时,将完成登录等操作并创建 session 。 session 需要保持事件状态,因此构造函数会启动一个单独的进程来处理此问题。 close() 方法注销 session 并停止进程。现在理想情况下我不想调用 close()。相反,我希望在不再需要实例时发生这种情况,即我希望能够删除下面的 session.close() 调用。这可能吗?

import time
from multiprocessing import Process

class WebApiSession:
def __init__(self):
# start session, login etc
# ...
# start touch loop
self.touchLoop = Process(target = self.runTouchLoop)
self.touchLoop.start()
def runTouchLoop(self):
self.touch()
time.sleep(1)
self.runTouchLoop()
def touch(self):
# touch session
pass
def close(self):
# logout etc
# ...
self.touchLoop.terminate()
def doSomething(self):
pass

if __name__ == '__main__':
session = WebApiSession()
session.doSomething()
session.close()

最佳答案

听起来您可以从实现 WebApiSession as a context manager 中受益。 。然后,您可以像对待任何其他“上下文”一样对待您的 session ​​,这些“上下文”具有在打开和关闭时必须调用的特殊方法,例如文件或其他连接。它还会给你带来额外的好处,比如整齐地总结错误等等。

class WebApiSession(object):
def __init__(self):
pass # other init stuff here, but don't connect yet.

def __enter__(self): # entering the context.
# start session, login, start touch loop
self.touchLoop = Process(target = self.runTouchLoop)
self.touchLoop.start()
return self
def __exit__(self, exc_type, exc_val, traceback): # leaving the context.
# Bonus feature: handle exception info here as needed!
self.close()


if __name__ == '__main__':
with WebApiSession() as session:
session.doSomething()

关于python - 对象销毁和过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22547125/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com