Socketserver multiprocessing.Process is starting without calling start()

回眸只為那壹抹淺笑 提交于 2019-12-07 21:14:06

问题


I have a problem with a Python script on my rpi. If I create a process object, it starts automatically and blocks everything else. I want it to run in the background, and to be able to start it by calling the start() method.

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()

Thanks.


回答1:


This:

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

Should be this:

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

You don't actually want to call serve_forever, you just want to pass the function to the Process object.



来源:https://stackoverflow.com/questions/23640164/socketserver-multiprocessing-process-is-starting-without-calling-start

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!