父子进程之间的通信

时间:2011-05-23 16:17:13

标签: python multithreading python-3.x

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

父进程生成子进程,然后继续自己的商业,现在我想发送一条消息给特定的子进程,捕获它并采取行动。

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

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

我想要实现的是让程序的主要部分与用户交互,处理用户输入并向用户呈现信息。 这将与来自不同服务器的子部件进行异步,从服务器回收消息并从用户向服务器发送正确的消息。 然后子进程将信息发送回主要部分,并将其提交给用户

我的问题是:

  1. 我是以错误的方式去做这件事
  2. 哪个模块最适合使用
    2.1如何设置

2 个答案:

答案 0 :(得分:3)

参见Doug Hellmann的(多处理)“进程间的通信”http://www.doughellmann.com/PyMOTW/multiprocessing/communication.html他的本周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

print "second process finished"

答案 1 :(得分:2)

听起来你可能熟悉多处理,而不是python。

os.pipe将为您提供连接父母和孩子的管道。并且semaphores可用于在父和子进程之间协调/发送信号。您可能需要考虑传递消息queues