把烟斗放进字典里

2024-10-06 12:44:53 发布

您现在位置:Python中文网/ 问答频道 /正文

PMU_PIPE_MAP = {}

PIPE= 'tmp/%s.pipe' % hostname
if not os.path.exists(PIPE):
    os.mkfifo(PIPE)

PMU_PIPE_MAP[hostname] = os.open(PIPE, os.O_WRONLY)

我正试图打开n管道。为了跟踪它们,我想以某种方式存储它们—就像在字典中—我认为上面的代码应该可以工作,但是在执行过程中它会冻结。有什么建议吗?在

但这确实有效:

^{pr2}$

Tags: pathmapifosexistsnotopentmp
2条回答

它没有经过测试,但愿它对你有帮助

import os, tempfile

tmpdir = tempfile.mkdtemp()

PMU_FIFO_MAP = {}

def openFIFO(pname):
    filename = os.path.join(tmpdir, '%s' % pname)
    fifo = None
    try:
        os.mkfifo(filename)
        fifo = os.open(PIPE, os.O_WRONLY)
    except OSError, e:
        print "Failed to create FIFO: %s" % e
        print e.printStackTrace()
    return fifo

def closeFIFO(fname, fifo):
    fifo.close()
    os.remove(fname)

for hostname in hostnames:
    fifo = openFIFO(hostname)
    if fifo:
        PMU_FIFO_MAP[hostname] = fifo

# do stuff with fifos

for fname, fifo in PMU_FIFO_MAP.items():
    closeFIFO(fname, fifo)
    del PMU_FIFO_MAP[hostname]

os.rmdir(tmpdir)

另请参阅可能的Create a temporary FIFO (named pipe) in Python?。在

啊哈!显然,在管道的另一端必须有一个读数,然后我们才能从管道中返回。所以我问的问题是不正确的,因为我没有用同样的方式测试这两个场景。所以我的问题是如何理解管道的工作原理。在这种情况下,一旦管道在“read”端打开,字典条目将成功,但在此之前将阻塞。 how to determine if pipe can be written

相关问题 更多 >