在一个脚本中更新列表,并从另一个脚本访问更新列表



我试图开发一个客户端服务器模块,我有2个文件listen.pyserver.pyclient.py

现在,我正在尝试实现多客户端服务器,因此我有2个单独的文件,listen.py创建一个套接字对象并监听连接,一旦客户端连接,其套接字对象将被附加到列表中,更新的列表应该可以在server.py

中访问代码,两个文件的输出:

listen.py

import socket
conn_list = []
if __name__ == '__main__':
try:
sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.setblocking(1)
sock.bind(('0.0.0.0',80))
print('started listening on port 80')
sock.listen(10)
while True:
vconn,addr = sock.accept()
print('Got connection from : ',addr)
conn_list.append(vconn)

listen.py(隐藏ip)输出:

started listening on port 80
Got connection from :  ('x.x.x.x', 64486)
[<socket.socket fd=916, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('y.y.y.y', 80), raddr=('x.x.x.x', 64486)>]

server.py我只是想打印更新的conn_list:

import time 
import listen
if __name__ == '__main__':
while True:
time.sleep(5)
print(listen.conn_list)
server.py的输出:
[]
[]
[]
[]
[]
[]
[]
[]

我们可以看到,list没有得到更新,因为我得到一个空列表。我甚至尝试重新加载模块"listen";在server.py中使用reload库,但没有运气,因为reload实际上是重新加载静态元素!

我所要做的就是在server.py中拥有这个socket对象以进行进一步的操作。

平台:Windows 10

Python: 3.8.5

任何帮助都是感激的。

我使用@quamrana的建议是这样做的。

server.py

conn_list = []
def listen(child_pipe):
try:
sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.setblocking(1)
sock.bind(('0.0.0.0',80))
print('started listening on port 80')
sock.listen(10)
while True:
vconn,addr = sock.accept()
child_pipe.send(vconn)
except Exception as e:
print(str(e))
if __name__ == '__main__':
parent_pipe, child_pipe = multiprocessing.Pipe()
p = multiprocessing.Process(target=listen, args=(child_pipe,))
p.daemon = True
p.start()
while True:
time.sleep(2)
msg = parent_pipe.recv()
if msg:
conn_list.append(msg)
print(conn_list)

相关内容

  • 没有找到相关文章

最新更新