Python 多进程问题进程未启动

标签 python multiprocessing

我写了这段代码,我想要一个主线程来启动多个子进程,这些子进程生成一个监听器线程来等待终止消息子进程工作,但测试进程不运行,没有错误,有什么想法吗?

   from multiprocessing import Process, Pipe
   from threading import Thread
   import time

   Alive = True 

   def listener_thread(conn): #listens for kill from main 
        global Alive
        while True:
        data = conn.recv()
        if data == "kill":
           Alive = False #value for kill 
           break

    def subprocess(conn):
        t = Thread(target=listener_thread, args=(conn,))
        count = 0 
        t.start()
        while Alive:
              print "Run number = %d" % count
              count = count + 1 


    def testprocess(conn):
    t = Thread(target=listner_thread, args=(conn,))
    count = 0 
    t.start()
    while Alive:
          print "This is a different thread run = %d" % count
          count = count + 1

    parent_conn, child_conn = Pipe()
    p = Process(target=subprocess, args=(child_conn,))
    p2 = Process(target=testprocess, args=(child_conn,))
    runNum = int(raw_input("Enter a number: ")) 
    p.start()
    p2.start()
    time.sleep(runNum) 
    parent_conn.send("kill") #sends kill to listener thread to tell them when to stop
    p.join()
    p2.join()

最佳答案

testprocess 中的拼写错误导致函数提前退出。

listner_thread 应为 listener_thread

如果注释掉subprocess相关代码并运行该代码,您将看到以下错误:

Process Process-1:
Traceback (most recent call last):
  File "/usr/lib/python2.7/multiprocessing/process.py", line 258, in _bootstrap
    self.run()
  File "/usr/lib/python2.7/multiprocessing/process.py", line 114, in run
    self._target(*self._args, **self._kwargs)
  File "t.py", line 25, in testprocess
    t = Thread(target=listner_thread, args=(conn,))
NameError: global name 'listner_thread' is not defined

关于Python 多进程问题进程未启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17691134/

相关文章:

python - 使用多个进程在 Python 中写入文件

Python 多处理,在循环中多次使用池在第一次迭代后卡住

python - 分析 python 多处理池

multiprocessing - MPI 未使用分配的所有 CPU

python - 在IPython中运行ProcessPoolExecutor

python - 在我的模型定义中创建一个数组列

Python比较操作,if和None

python - Git:按 merge 顺序提交

python - 最后一个字符不打印

python - 从 Int 中减去并打印