gpt4 book ai didi

python - 父子进程之间的通信

转载 作者:太空狗 更新时间:2023-10-30 00:00:27 24 4
gpt4 key购买 nike

我正在尝试创建一个具有一个或多个子进程的 Python 3 程序。

父进程生成子进程,然后继续自己的业务,有时我想向捕获它并采取行动的特定子进程发送消息。

子进程在等待消息时也需要保持非锁定状态,它将运行自己的循环来维护服务器连接并将任何接收到的消息发送给父进程。

我目前正在研究 python 中的多处理、线程、子进程模块,但未能找到任何解决方案。

我想要实现的是让程序的主要部分与用户交互,处理用户输入并向用户呈现信息。这将与与不同服务器通信的子部分异步,从服务器接收消息并将正确的消息从用户发送到服务器。然后子进程将信息发送回主要部分,在那里他们将被呈现给用户

我的问题是:

  1. 我是不是走错路了
  2. 哪个模块最适合使用
    2.1 我将如何设置

最佳答案

参见 Doug Hellmann 的(多处理)"Communication Between Processes" .他的本周 Python 模块系列的一部分。使用字典或列表与进程通信相当简单。

import time
from multiprocessing import Process, Manager

def test_f(test_d):
""" frist process to run
exit this process when dictionary's 'QUIT' == True
"""
test_d['2'] = 2 ## change to test this
while not test_d["QUIT"]:
print "test_f", test_d["QUIT"]
test_d["ctr"] += 1
time.sleep(1.0)

def test_f2(name):
""" second process to run. Runs until the for loop exits
"""
for j in range(0, 10):
print name, j
time.sleep(0.5)

print "second process finished"

if __name__ == '__main__':
##--- create a dictionary via Manager
manager = Manager()
test_d = manager.dict()
test_d["ctr"] = 0
test_d["QUIT"] = False

##--- start first process and send dictionary
p = Process(target=test_f, args=(test_d,))
p.start()

##--- start second process
p2 = Process(target=test_f2, args=('P2',))
p2.start()

##--- sleep 3 seconds and then change dictionary
## to exit first process
time.sleep(3.0)
print "\n terminate first process"
test_d["QUIT"] = True
print "test_d changed"
print "data from first process", test_d

time.sleep(5.0)
p.terminate()
p2.terminate()

关于python - 父子进程之间的通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6099981/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com