Socketserver multiprocessing.Process未调用start()却开始运行

2 投票
1 回答
1464 浏览
提问于 2025-04-18 06:27

我在我的树莓派上有一个Python脚本遇到了问题。如果我创建一个进程对象,它会自动启动,并且会阻塞其他所有操作。我希望它能在后台运行,并且可以通过调用start()方法来启动它。

network_manager.py:

import socketserver

class NetworkManagerHandler(socketserver.StreamRequestHandler):
    def handle(self):
        print("Got some Data!")

class NetworkManagerServer(socketserver.ForkingMixIn, socketserver.TCPServer):
    pass

core.py:

import multiprocessing
from network_manager import NetworkManagerServer, NetworkManagerHandler

HOST, PORT = "100.0.0.1", 11891

network_manager = NetworkManagerServer((HOST, PORT), NetworkManagerHandler)
network_manager_process = 
            multiprocessing.Process(target=network_manager.serve_forever())
# !-> Program is blocking here, but the Server is working. <-! 
network_manager_process.daemon = True
network_manager_process.start()

print("Networkmanager is running. (%s:%s)" % (HOST, PORT))

# network_manager.shutdown()

谢谢。

1 个回答

4

这个:

network_manager_process = 
            multiprocessing.Process(target=network_manager.serve_forever())

应该是这个:

network_manager_process = 
            multiprocessing.Process(target=network_manager.serve_forever)

其实你并不想直接调用 serve_forever 这个函数,你只是想把这个函数传递给 Process 对象。

撰写回答