Подтвердить что ты не робот

Исключение в потоке: должна быть последовательность, а не экземпляр

Im работает над python и im, пытаясь выполнить поток, который принимает 1 параметр "q", но когда im пытается выполнить его, возникает странное исключение, здесь мой код:

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

У меня нет идеи, что происходит! Помогите пожалуйста!

4b9b3361

Ответ 1

Параметр args для threading.Thread должен быть кортежем, и вы передаете (q), который не является - он совпадает с q.

Я предполагаю, что вам нужен 1-элементный кортеж: вы должны написать (q,).