Я пытаюсь вызвать подпроцесс внутри подпроцесса, чтобы отправить информацию с помощью ZMQ в приложение Unity. Когда я вызываю socket.recv () или time.sleep, он блокирует родительский процесс (который является дочерним процессом основного процесса)
import json
import zmq
from multiprocessing import Process
import multiprocessing as mp
from absl import app, flags, logging
from absl.flags import FLAGS
def send_unity_data(arg):
context = zmq.Context()
socket = context.socket(zmq.ROUTER)
socket.bind("tcp://*:8080")
while True:
if(arg.poll()):
message=arg.recv()
x = { "x":str(message[0]), "y":str(message[1])}
app_json = json.dumps(x)
socket.send_string(app_json)
message = socket.recv()
print("Received request: %s" % message)
def streaming(detection,args):
try:
vid = cv2.VideoCapture(int(FLAGS.video))
except:
vid = cv2.VideoCapture(FLAGS.video)
receiver1 , sender1 = mp.Pipe()
b_proc3 = Process(target=send_unity_data, args=[receiver1])
b_proc3.start()
while(True):
...
def Main(_argv):
receiver , sender = mp.Pipe()
b_proc = Process(target=streaming, args=[receiver,FLAGS])
b_proc.start()
while(True):
...
Я хочу отправить позиционные координаты в приложение Unity, которое рассчитывается в процессе потоковой передачи. Если у кого-то есть лучший способ сделать это, я также могу изменить свой код.
Спасибо всем