하나의 프로세스가 소켓에서 데이터를 수신 한 다음 대기열에 넣고 다른 프로세스가 대기중인 데이터를 처리 중입니다. 둘을 동시에 운영하는 방법?동시에 두 개의 다른 프로세스를 실행하는 방법은 무엇입니까?
이 소켓은 serve_forever이며 큐 처리가 비어 있지 않은 경우에만 데이터 처리가 실행됩니다.
하나의 프로세스가 소켓에서 데이터를 수신 한 다음 대기열에 넣고 다른 프로세스가 대기중인 데이터를 처리 중입니다. 둘을 동시에 운영하는 방법?동시에 두 개의 다른 프로세스를 실행하는 방법은 무엇입니까?
이 소켓은 serve_forever이며 큐 처리가 비어 있지 않은 경우에만 데이터 처리가 실행됩니다.
서버 또는 클라이언트 응용 프로그램이있는 경우에도 다릅니다. 사용할 수있는 것보다 서버 인 경우
SocketServer.TCPServer.allow_reuse_address = True
self.server = TCPFactory((HOST, PORT), TCPRequestHandler, params)
# Start a thread with the server
self.server_thread = threading.Thread(target = self.server.serve_forever)
self.server_thread.setDaemon(True)
self.server_thread.start()
class TCPFactory(SocketServer.ThreadingTCPServer):
def __init__(self, server_address, RequestHandlerClass, params):
"""
"""
SocketServer.ThreadingTCPServer.__init__(self, server_address, RequestHandlerClass)
self.patrams = params
class TCPRequestHandler(SocketServer.BaseRequestHandler):
def setup(self):
print self.server.params
pass
def handle(self):
pass
따라서 클라이언트가 서버에 연결되어 있으면 새 스레드가 시작됩니다. setup
및 handler
함수가 자동으로 호출됩니다. 는 다른 스레드를 위해 당신은 타이머, 또는 다른 스레드
myt = Timer(2, chackque,())
myt.start()
def chackque():
if not myq.empty():
#Do what you want
를 사용하거나 그냥 다른 스레드를 시작할 수 있습니다 : 내가 그것을 작동 한
mythread = threading.Thread(target = chackque, args = (myargs,))
mythread.setDaemon(True)
mythread.start()
def chackque():
while True:
if not myq.empty():
#Do what you want
예, 클라이언트와 서버 응용 프로그램을 가지고 있습니다. 이 수신 응용 프로그램은 서버 응용 프로그램이지만이 스레드를 만들지는 않습니다. 두 번째 프로세스가 선형이되기를 바랄뿐입니다. 한 번에 하나의 데이터 만 처리됩니다. 첫 번째 프로세스는 클라이언트 응용 프로그램에서 데이터를 수신합니다. 나는 멀티 프로세싱을 들여다 보았지만, 어떻게 작동하는지 이해하지 못하고있다. – jeanette18
이것은 좋은 멀티 프로세싱 예제입니다. http://pymotw.com/2/multiprocessing/ –
thanks to iungi! 나는 이제 리드가 있다고 생각해. – jeanette18
합니다. 이것이 대답인지 아닌지 모르겠습니다. 그러나 그것은 잘 작동하고 있습니다. 어쩌면 버그가있을 수도 있고 없을 수도 있습니다 (아무도 없습니다). 개선을위한 제안은 언제나 환영합니다.
import multiprocessing
import socket
from multiprocessing import Process, Queue
import time
def handle(connection, address):
try:
while True:
data = connection.recv(1024)
if data == "":
break
else :
print "RECEIVE DATA : " + str(data)
xdata = data.strip()
xdata = data.split(" ")
for xd in xdata :
print "PUT Task : " + str(xd)
QueueTask.put((xd), block=True, timeout=5)
connection.sendall(data)
except:
print "Problem handling request"
finally:
connection.close()
class Server(object):
def __init__(self, hostname, port):
self.hostname = hostname
self.port = port
def start(self):
self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.socket.bind((self.hostname, self.port))
self.socket.listen(1)
while True:
conn, address = self.socket.accept()
process = multiprocessing.Process(target=handle, args=(conn, address))
process.daemon = True
process.start()
def f_Processor():
time.sleep(10)
print 'PROCESSOR Starting'
while 1:
try :
job = QueueTask.get(True,1)
print "GET Task : " + str(job)
time.sleep(5)
except Exception as err :
pass
print 'PROCESSOR Exiting'
if __name__ == "__main__":
server = Server("localhost", 9999)
QueueTask = Queue()
try:
p = multiprocessing.Process(name='Processing', target=f_Processor)
p.start()
server.start()
p.join()
except:
print "Unexpected exception"
finally:
for process in multiprocessing.active_children():
process.terminate()
process.join()
print "All done"
2 개의 병렬 프로세스 또는 스레드를 원하십니까? – kaspersky
2 개의 병렬 프로세스가 필요합니다. 두 번째 프로세스가 선형이어야합니다. – jeanette18
'다중 처리'모듈 – wim