0

ここで見つけたものをモデルにしたこのマルチプロセススクリプトに問題があります http://broadcast.oreilly.com/2009/04/pymotw-multiprocessing-part-2.html

class test_imports:#Test classes remove 
  def import_1(self, control_queue, thread_number):
      print ("Import_1 number %d started") % thread_number
      run = True
      count = 1
      while run:
            alive = control_queue.get()
            if alive == 't1kill':
               print ("Killing thread type 1 number %d") % thread_number
               run = False
               break
            print ("Thread type 1 number %d run count %d") % (thread_number, count)
            count = count + 1

def worker_generator(control_queue, threadName, runNum):
    if threadName == 'one':
        print ("Starting import_1 number %d") % runNum
        p = Process(target=test_import.import_1, args=(control_queue, runNum))
        p.start()     


if __name__ == '__main__':
    # Establish communication queues
    control = multiprocessing.Queue()


    runNum = int(raw_input("Enter a number: ")) 
    threadNum = int(raw_input("Enter number of threads: "))
    threadName = raw_input("Enter number: ")
    thread_Count = 0

    print ("Starting threads") 

    for i in range(threadNum):
        worker_generator(control, threadName, i)
        thread_Count = thread_Count + 1              

    time.sleep(runNum)#let threads do their thing

    print ("Terminating threads")     

    for i in range(thread_Count):
        control.put("t1kill")
        control.put("t2kill")

これは、実行時に表示されるエラーです。

Traceback (most recent call last):
  File "multiQueue.py", line 62, in <module>
    worker_generator(control, threadName, i)
  File "multiQueue.py", line 34, in worker_generator
    p = Process(target=test_import.import_1, args=(control_queue, runNum))
NameError: global name 'Process' is not defined`

どこにあるかはわかっていますが、そのプロセス呼び出しは既知の適切なコードから取得したため、構文エラーではないと思います。何か助けはありますか?

4

2 に答える 2

1

あなたはおそらくそうしましたimport multiprocessing。コードで実際に行ったので、これは問題ありません。

multiprocessing.Queue()

しかし、するときProcess()、前に置くのを忘れましmultiprocessing.た。

ただし、クラスを直接インポートすることでこれを修正することもできます。

from multiprocessing import Queue, Process

multiprocessing.Queue()しかし、その後、あなたはただに変更する必要がありますQueue()

于 2013-07-28T00:09:28.733 に答える
1

通常、これはモジュールのインポートが欠落していることが原因です。

あなたはimport multiprocessing

私が持っているコードは次のとおりです。

import multiprocessing
import time

class test_imports:#Test classes remove 
  def import_1(self, control_queue, thread_number):
      print ("Import_1 number %d started") % thread_number
      run = True
      count = 1
      while run:
            alive = control_queue.get()
            if alive == 't1kill':
               print ("Killing thread type 1 number %d") % thread_number
               run = False
               break
            print ("Thread type 1 number %d run count %d") % (thread_number, count)
            count = count + 1

def worker_generator(control_queue, threadName, runNum):
    if threadName == 'one':
        print ("Starting import_1 number %d") % runNum
        p = multiprocessing.Process(target=test_imports.import_1, args=(control_queue, runNum))
        p.start()     


if __name__ == '__main__':
    # Establish communication queues
    control = multiprocessing.Queue()


    runNum = int(raw_input("Enter a number: ")) 
    threadNum = int(raw_input("Enter number of threads: "))
    threadName = raw_input("Enter name: ")
    thread_Count = 0

    print ("Starting threads") 

    for i in range(threadNum):
        worker_generator(control, threadName, i)
        thread_Count = thread_Count + 1              

    time.sleep(runNum)#let threads do their thing

    print ("Terminating threads")     

    for i in range(thread_Count):
        control.put("t1kill")
        control.put("t2kill")
于 2013-07-28T00:04:57.683 に答える