如何运行两个不同的Python程序来控制一个公共队列?

时间:2013-03-15 02:44:11

标签: python queue

以下是来源:

#one.py: 
from Queue import Queue 
req = Queue()

#two.py: 
import one 
import time 
if __name__ == '__main__': 
    while True: 
    print "this is two.py and reqID is ",id(one.req) 
    print "Queue size is %s"%one.req.qsize() 
    time.sleep(5) 

#three.py: 
import one 
import time 
if __name__ == '__main__': 
    while True: 
    print "this is three.py and reqID is ",id(one.req) 
    print "Queue size is %s"%one.req.qsize() 
    one.req.put(2) 
    time.sleep(5) 

one.py有一个共同的队列。我想使用two.pythree.py来控制one.py的公共队列。

2 个答案:

答案 0 :(得分:0)

根据您的目的,我们会想到一些选项:

  • 您可以使用操作系统管道(FIFO,无论如何),并像文件一样从/向其读/写数据。这根本不会使用Queue系统。
  • 你可以用其他方式组合这些程序。让two.py和three.py只定义它们各自的函数,然后从one.py中定义import two, three,从one.py中定义fork过程。可能会使用multiprocessing。我不是100%确定Queue是否能在完全分叉的进程中正常工作。 multiprocessing包也有自己的Queue类。
  • 只需使用python线程。我觉得这不适合你的应用程序,但我想我还是把它放在这里。

第二种选择可能就是我要做的。在.py和three.py中的函数需要以Queue作为参数。

答案 1 :(得分:0)

两个不同的程序无法直接访问彼此的数据。这在操作系统上下文中称为进程隔离:

http://en.wikipedia.org/wiki/Process_isolation

您需要使用进程间通信。参见:

http://en.wikipedia.org/wiki/Inter-process_communication

python标准库中的IPC功能示例:

http://docs.python.org/2/library/ipc.html