Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否将python套接字对象保存并加载到sqlite db?_Python_Sqlite_Sockets - Fatal编程技术网

是否将python套接字对象保存并加载到sqlite db?

是否将python套接字对象保存并加载到sqlite db?,python,sqlite,sockets,Python,Sqlite,Sockets,我想创建多个套接字对象并将它们保存在sqlite数据库中,因为我不想在内存中创建大量的套接字对象列表。稍后(在同一个python会话中),我想在var中加载一个又一个套接字,并再次使用它发送消息和其他内容。现在我的问题是,我不确定如何将其序列化并保存到sqlite数据库中。我用picklingsocket作为字符串对象进行了尝试,但效果不好,因为我无法将其作为套接字类型对象从数据库中加载。也许有人知道更好的解决办法 编辑: 这个问题现在已经解决了。谢谢你的帮助!我现在要做的是,在接受新连接后,立

我想创建多个套接字对象并将它们保存在sqlite数据库中,因为我不想在内存中创建大量的套接字对象列表。稍后(在同一个python会话中),我想在var中加载一个又一个套接字,并再次使用它发送消息和其他内容。现在我的问题是,我不确定如何将其序列化并保存到sqlite数据库中。我用picklingsocket作为字符串对象进行了尝试,但效果不好,因为我无法将其作为套接字类型对象从数据库中加载。也许有人知道更好的解决办法

编辑:


这个问题现在已经解决了。谢谢你的帮助!我现在要做的是,在接受新连接后,立即使用获取conn_套接字的filedescriptor,并将其作为字符串写入sqlite数据库。然后,当我需要套接字时,我会获取数据库的filedescriptor值,并使用创建套接字。套接字功能齐全,可以使用此方法反复创建。所以我实际上让它工作起来,不需要有多个列表,而是有一个包含所有有用的单个连接的db。但重要的是要知道,当我关闭我的pthon程序时,db被删除了,因为套接字也被删除和关闭了。但它对我的情况还是有用的。

好吧,这不是你想要的方式。套接字对象包含一个非常类似于打开文件的操作系统。如果将其保存到数据库中,可能会存储一些有用的信息,但该文件会消失。当您从数据库中选择它时,它将不再是一个工作套接字


如果你需要打开很多插座,那么你只要打开就行了。它们实际上不会占用那么多存储空间。如果您担心这个问题,那么在完成一个套接字后关闭它,然后打开另一个。

您可能只需要存储实例化套接字对象所需的数据,然后加载该对象并动态创建套接字。我很确定你甚至不能对一个套接字对象进行pickle,序列化像套接字这样的东西对你来说没有多大意义!但是你知道一种方法如何在只给出ip地址和端口的情况下重新实例化套接字吗?与连接任何(我假设TCP)套接字的方法相同:
import socket;s=socket.socket();s、 连接((主机,端口))
。在SQLite数据库中存储文件描述符没有意义。如果您已经接受了连接,但没有处理它们(例如关闭、关闭),它们仍然会消耗内存(当您再次使用
socket.fromfd()
重新激活它们时,情况会更糟)。是的,您是对的,它们仍然会消耗内存。但是我想把所有的东西都放在一个db里,但我还是看着,我的内存使用并没有随着时间的推移而增加,因为至少VAR被垃圾回收了。因此,就我而言,这真的是非常感谢!!但我还有另外一个想法:你知道如何通过给func一个端口和Ip来重新初始化套接字吗?然后我可以将IP和端口保存在db中,并在需要时重新初始化套接字。保存IP和端口并调用
socket.socket
,然后调用connect。他们就是这么做的。