def serv_start(handle): global socket, server, cache mode = config['mode'] if mode == 'gevent': global geventsocks from gevent.server import DatagramServer from gevent import socket import geventsocks geventsocks.set_default_proxy(config['socks5_ip'], config['socks5_port']) server = DatagramServer((config['listen_ip'], config['listen_port']), handle) cache = {} return server.serve_forever() elif mode == 'multiprocessing': global socks import socket import multiprocessing import socks socks.set_default_proxy(socks.SOCKS5, config['socks5_ip'], config['socks5_port']) server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) server.bind((config['listen_ip'], config['listen_port'])) cache = multiprocessing.Manager().dict() pool = multiprocessing.Pool(config['the_num_of_processes']) while True: data, cli_addr = server.recvfrom(512) pool.apply_async(handle, args=( data, cli_addr, ))