Как запустить экземпляр скрипта Python с аргументами параллельно? - PullRequest
0 голосов
/ 29 октября 2018

Я пытаюсь запустить сценарий (flowcheck.py) в качестве экземпляра, чтобы, если клиент отправляет более одного запроса подряд, сценарии не зависают и ожидают завершения предыдущего запроса.

Есть ли способ заставить сервер просто запустить экземпляр сценария + аргументы, не отслеживая его, а затем вернуться к прослушиванию следующего запроса?

Код сервера

#!/usr/bin/env python

import SocketServer
import flowcheck
import os 

class MyTCPHandler(SocketServer.BaseRequestHandler):


    def handle(self):
        # self.request is the TCP socket connected to the client
        self.data = self.request.recv(1024).strip()
        print "{} wrote:".format(self.client_address[0])
        print self.data

        flowcheck.flow(self.data)


if __name__ == "__main__":
    HOST, PORT = "", 5007

    # Create the server, binding to localhost on port 5007
    server = SocketServer.TCPServer((HOST, PORT), MyTCPHandler)

    # Activate the server; this will keep running until you
    # interrupt the program with Ctrl-C
    server.serve_forever()

Код клиента

#!/usr/bin/env python

import socket
import sys

HOST, PORT = "192.168.8.201", 5007
data = " ".join(sys.argv[1:])

# Create a socket (SOCK_STREAM means a TCP socket)
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

try:
    # Connect to server and send data
    sock.connect((HOST, PORT))
    sock.sendall(data + "\n")


finally:
    sock.close()

print "Sent:     {}".format(data)

Сценарий

#!/usr/bin/env python
import sys
import time
#data = " ".join(sys.argv[1:])
def flow(data):
    var=0
    while var<3:

        print "FlowCheck",data,var
        var = var +1
        time.sleep(5)

1 Ответ

0 голосов
/ 30 октября 2018

Вместо импорта сценария, import subprocess с использованием Popen для запуска экземпляра сценария в фоновом режиме и продолжения приема запросов.

#!/usr/bin/env python

import SocketServer
import os 
import subprocess

class MyTCPHandler(SocketServer.BaseRequestHandler):

    def handle(self):
        # self.request is the TCP socket connected to the client
        self.data = self.request.recv(1024).strip()
        print "{} wrote:".format(self.client_address[0])
        print self.data

        var1 =self.data
        subprocess.Popen([ "python", "flowcheck.py",var1])

Перейдите в скрипт, чтобы принимать системные аргументы с import sys

#!/usr/bin/env python
import sys
import time

print "start"
data = sys.argv[1]

def flow(data):
    var=0
    while var<3:

        print "FlowCheck",data,var
        var = var +1
        time.sleep(5)

flow(data)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...