python - 在一个脚本中更新列表并从另一个脚本访问更新的列表

标签 python sockets server client shared-objects

我正在尝试开发一个客户端服务器模块,其中有 2 个文件 听.py 服务器.py 用于服务器端和 客户端.py 对于客户端。
现在,我正在尝试实现多客户端服务器,因此我有 2 个单独的文件,其中 listen.py 创建一个套接字对象并监听连接,一旦客户端连接,它的套接字对象将被附加到一个列表中,并且更新的列表应该是在 server.py 中可访问
两个文件的代码和输出:
听.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)>]

服务器.py 我只是想打印更新的 conn_list:
import time 
import listen

if __name__ == '__main__':
    while True:
        time.sleep(5)
        print(listen.conn_list)
server.py 的输出:
[]
[]
[]
[]
[]
[]
[]
[]
正如我们所看到的,当我得到一个空列表时,列表没有得到更新。我什至尝试使用重新加载库在 server.py 中重新加载模块“监听”,但没有运气,因为重新加载实际上重新加载了静态元素!
我想要做的就是在 server.py 中有那个套接字对象以进行进一步的操作。
平台:Windows 10
python :3.8.5
任何帮助表示赞赏。

最佳答案

这是我使用@quamrana 的建议的方法。
服务器.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)

关于python - 在一个脚本中更新列表并从另一个脚本访问更新的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66031007/

相关文章:

python - 如何在python中检测断开连接,而不发送数据

linux - Perl 脚本将换行符添加到文本文件末尾

c - C中的段错误执行并发服务器

python - 通过 Pandas 计算每一行与共识的差异

python - 从 python 生成的文本文件中删除双方括号和单方括号

python - 如何在子进程python中使用linux命令

c++ - 从 Python 调用 IB API

.net - 使用异步 Socket.BeginReceive 时如何检测超时?

node.js - 开发服务器和 API 之间的 ECONNRESET 代理错误

installation - Fedora 下的 DART 服务器设置