在两个Python进程之间交换数据

时间:2017-07-12 20:17:45

标签: python json process python-multithreading

我有一个Arduino,它将一个JSON数据包发送到Python进程(PP1)。这个Python进程将持续运行。但是这个过程必须邀请和接收JSON数据包到另一个Python进程(PP2)。基本上PP1必须将从Arduino接收的JSON数据包传递给PP2。并且PP1必须从PP2接收命令包(也可以是JSON格式)。

链接到架构图像:

architecture

开始研究Python进程1的代码

import json

#open port
serialport = serial.Serial('COM5',38400,timeout=1,stopbits=serial.STOPBITS_TWO);
time.sleep(1);

#loop
while(True):
    #receive arduino data
    receive = serialport.readline()

    #vparse json
    try:
        test = json.loads(receive)
    except:
        print Exception.message
    else:
        print json.dumps(test)

你知道一个简单的方法吗?多线程是否必要?

1 个答案:

答案 0 :(得分:0)

您需要“某处”来存储您的数据。最简单的解决方案是使用multiprocessing.Queue,如果你需要扩展,你可以查看一些工作队列(huey,celery,django_q)。

使用multiprocessing.Queue的示例:

import multiprocessing

def pp1(q, data):
      processed_data = data_processing(data) # do some data processing and its result
      q.put(processed_data)

def pp2(q):
    result = q.get()
    show_results(result) # show results to the user


if __name__ == '__main__':
    queue = multiprocessing.Queue()

    process_1 = multiprocessing.Process(target=pp1, args=(queue,))
    process_1.start()

    process_2 = multiprocessing.Process(target=pp2, args=(queue,))
    process_2.start()

你的循环将是data_processingshow_results(虚拟)函数。

您可以在此处详细了解流程沟通:https://pymotw.com/3/multiprocessing/communication.html

希望有所帮助