1、为什么Django的后端程序不能开多进程?
2、Pthon Socket的服务端程序开多进程,开多线程
服务端
import time
import socket
from multiprocessing import Process, Queue
import threading
def run(queue,flag):
idx = 1
while True:
idx = idx + 1
if queue.full():
queue.get(idx)
queue.put(idx)
print(f"this is run: {idx}")
time.sleep(1)
f = flag.get()
if f == 1:
flag.put(1)
else:
break
ip_port = ('127.0.0.1', 8080)
sk = socket.socket() # 创建套接字
sk.bind(ip_port) # 绑定服务地址
sk.listen(5) # 监听连接请求
print('启动socket服务,等待客户端连接...')
conn, address = sk.accept() # 等待连接,此处自动阻塞
print('客户端连接成功')
queue = Queue(2)
flag = Queue(2)
flag.put(1)
prun = Process(target = run,args = (queue, flag))
prun.start()
# thread_server=threading.Thread(target=run,args=(queue,flag,))
# thread_server.start()
while True: # 一个死循环,直到客户端发送‘exit’的信号,才关闭连接
client_data = conn.recv(1024).decode() # 接收信息
if client_data == "exit": # 判断是否退出连接
flag.put(0)
sk.close() # 关闭连接
exit("通信结束")
print("来自%s的客户端向你发来信息:%s" % (address, client_data))
print(f"{queue.qsize()}, {flag.qsize()}")
a = queue.get()
conn.sendall(f'{a}'.encode()) # 回馈信息给客户端
客户端
import socket
ip_port = ('127.0.0.1', 8080)
s = socket.socket() # 创建套接字
s.connect(ip_port) # 连接服务器
while True: # 通过一个死循环不断接收用户输入,并发送给服务器
inp = input("请输入要发送的信息: ").strip()
if not inp: # 防止输入空信息,导致异常退出
continue
s.sendall(inp.encode())
if inp == "exit": # 如果输入的是‘exit’,表示断开连接
print("结束通信!")
break
server_reply = s.recv(1024).decode()
print(server_reply)
s.close() # 关闭连接