1. 当前位置:网站首页 > Python

多进程启动UDP接收不同端口数据


UDP接收不同端口数据案例

通过部署docker或者supervisor可以进程重启操作

# coding=utf-8
import sys
import time
import multiprocessing
import socketserver
import logging
import json
ports = [8190, 8001]

class UdpServer(socketserver.BaseRequestHandler):

    def handle(self):
        # 设备ip,0为ip 1为端口
        device_ip,  device_port = self.client_address
        data, server = self.request

def start_server(port, name):
    logging.info("%s%s启动" % (port, name))
    server = socketserver.ThreadingUDPServer(("0.0.0.0", port), UdpServer)
    server.serve_forever()

if __name__ == "__main__":
    logging.info("复合围栏V3.0底层服务已启动...")
    udp_server_list = []
    # 多进程数据通信
    # manager = multiprocessing.Manager()
    # temp_dict = manager.dict()
    for num in ports:
        udp_server = multiprocessing.Process(target=start_server, args=(num, "端口:"))
        udp_server.daemon = True
        udp_server.start()
        udp_server_list.append(udp_server)
    time.sleep(2)
    while True:
        for server_live in udp_server_list:
            if server_live.is_alive() is False:
                logging.warning("有进程崩溃,关闭全部进程重启")
                sys.exit()
        time.sleep(1)

附带docker的镜像运行命令和supervisor的配置文件

docker run -d --restart=always --name udp_server -p 8001:8001/udp -p 8190:8190/udp  -e TZ=Asia/Shanghai udp_server:1.0
[program:main]
command=python3  /root/main.py ;
user = root ;如果不是以root身份设置端口转发的话,转发端口只能使用大于1024的端口号
autostart=true 
autorestart=true 
numprocs=1 
killasgroup=true 
stopasgroup=true
startsecs = 10  ;自动重启间隔
[supervisord]
nodaemon=false

[supervisorctl]

本文最后更新于2022-5-27,已超过 3个月没有更新,如果文章内容或图片资源失效,请留言反馈,我们会及时处理,谢谢!
版权说明

本文地址:http://www.liuyangdeboke.cn/?post=7
未标注转载均为本站远程,转载请注明文章出处:

发表评论

联系我们

在线咨询:点击这里给我发消息

微信号:17721538135

工作日:9:00-23:00,节假日休息

扫码关注