2012-11-30 16 views
26

मैं अजगर पर काम कर रहा हूं और 1 पैरामीटर "क्यू" लेते हुए एक थ्रेड निष्पादित करने की कोशिश कर रहा हूं, लेकिन जब मैं इसे निष्पादित करने का प्रयास कर रहा हूं तो एक अजीब अपवाद होता है, यह मेरा कोड है:थ्रेड में अपवाद: उदाहरण नहीं होना चाहिए, उदाहरण के लिए

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 

मैं न विचार क्या हो रहा है है! कृपया मदद करें!

+0

यह भी देखें: http://stackoverflow.com/q/37400133/1240268 (इस अपवाद को देखने वालों के लिए क्योंकि उनके प्रकार ने स्टार-अनपॅकिंग को परिभाषित नहीं किया है)। –

उत्तर

43

threading.Thread करने के लिए args पैरामीटर एक टपल होना चाहिए और आप जो नहीं है (q) गुजर रहे हैं - यह q के समान है।

मुझे लगता है कि आप 1-तत्व ट्यूपल चाहते थे: आपको (q,) लिखना चाहिए।

+1

धन्यवाद @ टिबो! यह शर्मिंदा काम किया! – karensantana