蟒蛇;无法运行多个进程

时间:2014-03-06 18:34:45

标签: python multiprocessing

我正在尝试在我的python应用程序中运行2个单独的进程。所以我有这样的代码:

from multiprocessing import Process

def f1():
  while 1:  
    print('Hello')

def f2():
  while 1:
    print('Goodbye')


def main():
    p1 = Process(target=f1, args=())
    p1.start()
    p1.join()

    p2 = Process(target=f2, args=())
    p2.start()
    p2.join()

if __name__ == '__main__':
    main()

此代码在我的机器上不执行任何操作,它不会产生任何输出。我最初认为这可能是与IDE相关的问题,但在我的IDE,PyScripter和IDLE上都是一样的。
任何想法,为什么这不打印任何东西?

2 个答案:

答案 0 :(得分:3)

如何使用Queue

from multiprocessing import Process, Queue

def f1(q):
  while 1:
    q.put('Hello')

def f2(q):
  while 1:
    q.put('Goodbye')


def main():
  q = Queue()
  p1 = Process(target=f1, args=(q,))
  p1.start()

  p2 = Process(target=f2, args=(q,))
  p2.start()

  while True:
     try:
        print q.get()
     except:
        break

if __name__ == '__main__':
  main()

答案 1 :(得分:2)

您应该保存它并在IDE外部运行:

C:\> python multi.py
然后它无限地打印出Hello。您应该更改主广告,以查看HelloGoodbye

def main():
  p1 = Process(target=f1, args=())
  p2 = Process(target=f2, args=())

  p1.start()
  p2.start()

  p1.join()
  p2.join()

然后你有一个快乐的竞争条件,不断打印GHoodbyeello因为两个进程同时使用相同的stdout资源。