我正在尝试侦听端口的基本服务器程序,并且对于每个传入请求,它都会生成新的守护程序线程并继续执行。以前类似的代码曾经可以工作,但是现在这东西不起作用了。
server.py
import multiprocessing as mu
from time import sleep
from random import random
import socket
def worker():
while(True):
print("Inside worker....")
sleep(2)
socketObj = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_address = ("127.0.0.1", 8080)
socketObj.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
socketObj.bind(server_address)
socketObj.listen(10)
while(True):
print("Listening...")
data_socket, client_address = socketObj.accept()
a = data_socket.recv(9000)
p = mu.Process(target=worker, args=())
p.daemon = True
p.start()
client.py
import socket
s = "dummydata"
socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
socket.connect(('127.0.0.1', 8080))
socket.send(str.encode(s))
我先运行服务器,然后运行客户端。不知何故,它会继续为每个请求打印Listening...
(实际上有时会打印两次),而从不打印Inside worker...
。为什么永远不会生成守护线程?在您的计算机上是否表现相同?如果是,为什么?
答案 0 :(得分:0)
我以完全相同的顺序在机器上测试了完全相同的代码,对我来说看起来不错。我先运行server.py
,然后运行client.py
,并得到了预期的答案。
请确保您正在从不同的终端运行两个脚本,并确保已使用的端口在使用后被释放,因为如果您未正确结束/杀死进程,端口可能会很忙(fuser
命令有效如果在Linux中,请查看this answer)。因此,尝试使用另一个端口号应该可以。
在下面的链接中,您可以看到我第一次启动客户端脚本前后的服务器终端的图片。