27

私はpythonに取り組んでおり、1つのパラメーター「q」を受け取るスレッドを実行しようとしていますが、実行しようとすると奇妙な例外が発生します。私のコードは次のとおりです。

class Workspace(QMainWindow, Ui_MainWindow):
    """ This class is for managing the whole GUI `Workspace'.
        Currently a Workspace is similar to a MainWindow
    """

    def __init__(self):

        try:
            from Queue import Queue, Empty
        except ImportError:
    #from queue import Queue, Empty  # python 3.x
            print "error"

        ON_POSIX = 'posix' in sys.builtin_module_names

        def enqueue_output(out, queue):
            for line in iter(out.readline, b''):
                queue.put(line)
            out.close()

        p= Popen(["java -Xmx256m -jar bin/HelloWorld.jar"],cwd=r'/home/karen/sphinx4-1.0beta5-src/sphinx4-1.0beta5/',stdout=PIPE, shell=True, bufsize= 4024)
        q = Queue()

        t = threading.Thread(target=enqueue_output, args=(p.stdout, q))
        #t = Thread(target=enqueue_output, args=(p.stdout, q))

        t.daemon = True # thread dies with the program
        t.start()

# ... do other things here
        def myfunc(q):
            while True:

                try: line = q.get_nowait()
         # or q.get(timeout=.1)
                except Empty:
                    print('')
                else: # got line
    # ... do something with line
                    print "No esta null"
                    print line  


        thread = threading.Thread(target=myfunc, args=(q))
        thread.start()

次のエラーで失敗します。

Exception in thread Thread-2:
Traceback (most recent call last):
  File "/usr/lib/python2.7/threading.py", line 551, in __bootstrap_inner
    self.run()
  File "/usr/lib/python2.7/threading.py", line 504, in run
    self.__target(*self.__args, **self.__kwargs)
TypeError: myfunc() argument after * must be a sequence, not instance

何が起こっているのかわかりません!助けてください!

4

1 に答える 1

44

argsパラメータ toはthreading.Threadタプルである必要があり、そう(q)でないものを渡しています-それは と同じqです。

1 要素のタプルが必要だったと思います: と書く必要があります(q,)

于 2012-11-30T22:05:14.193 に答える