微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

尝试接收 PyTorch 张量时争夺管道资源

如何解决尝试接收 PyTorch 张量时争夺管道资源

我遇到一个问题,当一个子进程尝试接收 PyTorch 张量而另一个子进程请求不同的管道连接时,python 中的子进程会竞争管道资源。

这是我的代码(在 Ubuntu 18.04 上运行):


import time
from multiprocessing import Process,Pipe
import torch


def send(conn):
    a,b = Pipe()
    data = [torch.rand(1) for _ in range(20)]
    print('start sending',time.time())
    conn.send(data)
    print('finish sending',time.time())

    while True:
        if a.poll():
            pass
        # else:
        #    time.sleep(0.1)


def recv(conn):
    while True:
        if conn.poll():
            print('start receiving',time.time())
            conn.recv()
            print('finish receiving',time.time())
            break
        else:
            time.sleep(0.1)


if __name__ == '__main__':
    recv_conn,send_conn = Pipe()

    send_proc = Process(target=send,args=(send_conn,))
    recv_proc = Process(target=recv,args=(recv_conn,))

    send_proc.start()
    recv_proc.start()

    recv_proc.join()
    send_proc.terminate()

代码需要几秒钟才能接收到 Torch 张量。但是如果去掉send方法最后两行的注释,接收torch张量的速度会非常快。

这个问题只在发送火炬张量时出现。

有人知道这个问题的原因吗?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。