服务器应用多进程的方式实现求自然数阶乘
时间: 2023-08-11 07:27:56 浏览: 143
DiGuiDemo.zip_斐波那契_斐波那契数列_递归_递归求阶乘
是的,服务器应用多进程的方式也可以实现求自然数阶乘的功能,并且可以更好的利用多核CPU资源。以下是一个简单的示例代码:
```python
import socket
import multiprocessing
# 计算自然数阶乘的函数
def factorial(n):
if n == 0:
return 1
else:
return n * factorial(n-1)
# 处理客户端请求的进程函数
def handle_client(conn, addr):
print('Accepted connection from {}:{}'.format(*addr))
try:
while True:
data = conn.recv(1024)
if not data:
break
# 处理客户端请求
if data == b'factorial':
result = factorial(10)
conn.sendall(str(result).encode())
else:
conn.sendall(b'Invalid command')
except Exception as e:
print('Error: ', e)
finally:
conn.close()
print('Connection closed')
# 主进程
def main():
# 创建TCP/IP socket
server_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_sock.bind(('localhost', 8888))
server_sock.listen(5)
# 创建进程池
pool = multiprocessing.Pool(processes=4)
# 接受客户端连接,将socket加入队列
while True:
client_sock, client_addr = server_sock.accept()
print('Received connection from {}:{}'.format(*client_addr))
# 将客户端socket交给进程池处理
pool.apply_async(handle_client, args=(client_sock, client_addr))
if __name__ == '__main__':
main()
```
在上面的代码中,我们创建了一个进程池,每个进程都处理一个客户端的请求。当客户端请求的是求自然数阶乘时,进程计算并返回结果。客户端请求处理完成后,进程将socket关闭。
阅读全文