Env:Python 3.6和Django 2.1
我创建了一个Django网站和一个套接字服务器,文件的组织方式如下:
__init__.py
实际上,我想使用django构建一个雨伞出租系统,并且服务器通过多线程套接字(发送一些消息)连接到雨伞架。就像我按下借用按钮一样,views.py
可以调用服务器test_function并将一些消息发送到连接的伞架。
我可以在views.py
中导入服务器变量或函数,但是在server.py
运行时无法获得正确的答案。所以我想问你是否可以给我一些建议。非常感谢!
顺便说一句,我尝试直接在clients
中导入全局变量views.py
,但仍然得到[]
。
server.py
定义了一个多线程服务器,基本上如下:
clients = []
class StuckThread(threading.Thread):
def __init__(self, **kwargs):
self.name = kwargs.get('name', '')
def run(self):
while True:
# do something
def func1(self):
# do something
def test_function(thread_name):
# if the function is called by `views.py`, then `clients = []` and return 'nothing', but if I call this function in `server.py`, then I can get a wanted result, which is `got the thread`
for client in clients:
if client['thread'].name == thread_name:
return 'got the thread'
return 'nothing'
if __name__ == '__main__':
ip_port = ('0.0.0.0', 65432)
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(ip_port)
server.listen(max_listen_num)
while True:
client, address = socket.accept()
param = {'name': 'test name'}
stuck_thread = StuckThread(**param)
clients.append({"client": client, "address": address, "thread": stuck_thread})
stuck_thread.start()
我有一个像这样的Django views.py
def view_function(request):
from server import clients
print(clients) # got []
form server import test_function
print(test_function('test name')) # got 'nothing'
return render(request, 'something.html')
答案 0 :(得分:0)
我已经通过django views.py和server.py之间的套接字通信解决了这个问题。我打开另一个端口以接收来自views.py的消息。按下借用按钮后,views.py中的套接字客户端将建立并将参数和其他消息发送到服务器。