Конверт: Python 3.6 и Django 2.1
Я создал сайт Django и сервер сокетов, и файлы организованы так:
- Веб
- ...
- пользователь (приложение Django)
- server.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')