Socketserver multiprocessing.Process 在不调用 start() 的情况下启动 [英] Socketserver multiprocessing.Process is starting without calling start()

查看:30
本文介绍了Socketserver multiprocessing.Process 在不调用 start() 的情况下启动的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的 rpi 上的 Python 脚本有问题.如果我创建一个进程对象,它会自动启动并阻止其他所有内容.我希望它在后台运行,并且能够通过调用 start() 方法来启动它.

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:

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

谢谢.

推荐答案

这个:

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

应该是这样的:

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

您实际上并不想调用 serve_forever,您只想将函数传递给 Process 对象.

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

这篇关于Socketserver multiprocessing.Process 在不调用 start() 的情况下启动的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆