2013-11-23 135 views
1

我在python中使用多處理,嘗試在超時後終止運行。但它不起作用,我不知道原因。Python多處理超時問題

我跟着一個例子,看起來很容易。只需要啓動該過程,2秒鐘後終止運行。但它不適合我。

你能幫我弄清楚嗎?謝謝你的幫助!

from amazonproduct import API 
import multiprocessing 
import time 



AWS_KEY = '...' 
SECRET_KEY = '...' 
ASSOC_TAG = '...' 


def crawl(): 

    api = API(AWS_KEY, SECRET_KEY, 'us', ASSOC_TAG) 

    for root in api.item_search('Beauty', Keywords='maybelline', 
           ResponseGroup='Large'): 
     # extract paging information 
     nspace = root.nsmap.get(None, '') 
     products = root.xpath('//aws:Item', 
          namespaces={'aws' : nspace}) 

     for product in products: 
      print product.ASIN, 

if __name__ == '__main__': 
    p = multiprocessing.Process(target = crawl()) 
    p.start() 
    if time.sleep(2.0): 
     p.terminate() 

回答

3

好,這是不行的:

if time.sleep(2.0): 
    p.terminate() 

time.sleep不返回任何東西,所以上面的語句總是等同於if None:None在布爾上下文中是False,所以你去了。

如果您想要總是終止,請取出if語句。只是做一個裸露的time.sleep

此外,錯誤:

p = multiprocessing.Process(target = crawl()) 

這不是做你覺得它在做什麼。您需要指定target=crawl,而不是target=crawl()。後者在你的主線程中調用函數,前者將函數作爲參數傳遞給Process,然後它將並行執行它。