如何解决尝试接收 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 举报,一经查实,本站将立刻删除。