【问题标题】:multiprocessing: how to send data from parent to continuously running child process?多处理:如何将数据从父进程发送到持续运行的子进程?
【发布时间】:2020-07-03 00:19:29
【问题描述】:

是否可以使用多处理向正在运行的子进程发送数据?例如,在子进程中运行 Web 服务器并使用父进程向服务器发送数据。我找到了this question about the exact reverse of my situation(即从正在运行的子进程不断更新回父进程)。有没有办法让它工作?我的理解是 multiprocessing.Queue 仅在进程终止时发送/接收数据。这个伪代码给出了我想做的事情的骨架:

def server(q):
    //start eventlet server
    q.get() // --> does something

q = Queue()
p = Process(target=server, args=(q,))
p.start()
q.put("some kind of command")

【问题讨论】:

  • 您好 rustbird,您能否详细说明您正在尝试做的事情的背景。如果您有一个 Web 服务器作为子进程,为什么不通过 h​​ttp 与其通信。您是否考虑过使用像 celery 这样的任务队列? docs.celeryproject.org/en/stable/getting-started/…

标签: python multiprocessing python-multiprocessing multiprocess


【解决方案1】:

我认为您误读了您引用的答案。 multiprocessing.Queue 专为您描述的目的而设计。也许查看该类的参考文档?也可以是multiprocessing.Pipe

【讨论】:

  • 在我的代码中,q.get() 命令永远不会到达,因为 eventlet 服务器仍在运行。我不知道如何保持服务器运行并通过队列将数据传递给它。
【解决方案2】:

您的伪代码几乎完全按照编写的方式运行:

from multiprocessing import Queue, Process
import time

def server(q):
    while True:
        stuff = q.get()
        print(stuff, flush=True)

if __name__ == '__main__':
    q = Queue()
    p = Process(target=server, args=(q,))
    p.start()
    for i in range(5):
        q.put(i)
        time.sleep(1)
    p.terminate()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-12
    相关资源
    最近更新 更多