2014-10-30 73 views
1

我嘗試從「Programming Python」Mark Lutz運行簡單代碼。當我從IDLE運行時,一切都很好。當我從命令行腳本運行不起作用 - 沒有輸出,任何錯誤,只是在time.sleep()定義的時間後完成。使用線程在IDLE中工作但不通過命令行的腳本Ubuntu

如何從命令行正確運行此腳本? 我正在使用Ubuntu。

import Queue, thread, time 


    producersnumber=3 
    consumersnumber=1 
    msgnum=3 
    dataqueue=Queue.Queue()#why double 
    safeprint=thread.allocate_lock() 

    def producer(no): 
     for i in range(msgnum): 
      p='signalfrom %s'%no 
      time.sleep(1) 
      dataqueue.put(p) 

    def consumer(no): 
     while 1: 
      time.sleep(1) 
      try: 
       data=dataqueue.get(block=False) 
      except Queue.Empty: 
       pass 
      else: 
       safeprint.acquire() 
       print data 
       safeprint.release() 
    if __name__=='__main__': 
     for i in range(consumersnumber): 
      thread.start_new_thread(consumer,(i,)) 
     for i in range(producersnumber): 
      thread.start_new_thread(producer,(i,)) 
     time.sleep(1) 
+0

空閒顯示更多的時候它在控制檯的運行速度比。嘗試在腳本中添加'print'命令來顯示變量的值。 – 101 2014-10-30 11:28:39

+0

我期望**使用Queue.put()/ Queue.get()打印的consumer()生產者()生成的** p **變量 – MartinP 2014-10-30 11:41:06

+0

您的代碼與書中的代碼也不相同 – 2014-10-30 11:41:07

回答

1

time.sleep(1),在最後一行,將殺死被程序退出線程,他們(發送任何東西之前作爲生產者等待第二)其實做任何事情之前。將該行更改爲time.sleep(10)或減少producerconsumer中的time.sleep()的值。

隨着time.sleep(10)你會得到:

signalfrom 1 
signalfrom 0 
signalfrom 2 
signalfrom 1 
signalfrom 0 
signalfrom 2 
signalfrom 1 
signalfrom 0 
signalfrom 2 
相關問題