【问题标题】:How to access pipe connection object in a thread of a process in python? Multiprocessing如何在python进程的线程中访问管道连接对象?多处理
【发布时间】:2017-05-03 13:13:16
【问题描述】:

以下是我的代码

from multiprocessing import Process,Queue,Pipe
from threading import Thread
import time

p,q = Pipe()
def bcd(p):
    print p.recv()

def abc(p):
    t1 = Thread(target=bcd,args=(p,))
    t1.daemon = True
    t1.start()

p1 = Process(target=abc,args=(p,))
p1.start()

time.sleep(3)
q.send('test')

bcd() 作为线程启动时,p.recv() 不会打印任何内容。 但是,当我尝试从abc() 访问p 时, p.recv() 工作和打印test。有人可以解释这种行为吗?

【问题讨论】:

  • 我已将其传递给 bcd target=bcd,args=(p,)

标签: python multithreading python-multiprocessing


【解决方案1】:

您必须添加一些time.sleep(...) 才能为启动提供timeslice
其次,您必须持有 def abc(...),只要活着 def bcd(...) 需要到达并执行print(p.recv())

这对我有用,例如:

def bcd(p):
    print(p.recv())
    time.sleep(0.1)

def abc(p):
    t1 = Thread(target=bcd,args=(p,))
    #t1.daemon = True
    t1.start()

    while True:
        time.sleep(3)

if __name__ == '__main__':
    p,q = Pipe()
    p1 = Process(target=abc,args=(p,))
    p1.start()

    time.sleep(3)
    q.send('test')

    p1.join(4)
    p1.terminate()
    print('EXIT main')

使用 Python:3.4.2 和 2.7.9 测试

【讨论】:

    猜你喜欢
    • 2018-01-01
    • 2018-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-25
    • 1970-01-01
    • 2022-10-13
    相关资源
    最近更新 更多