Exception in Thread:must be a sequence, not instance
Im working on python and im trying to execute a thread that takes 1 parameter "q", but when im trying to execute it a strange exception occurs, here's my code:
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()
It fails with the following error:
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
I dont have idea what is happening! Help please!
Answers
The args parameter to threading.Thread should be a tuple and you are passing (q) which is not - it is the same as q.
I guess you wanted a 1-element tuple: you should would write (q,).