Python多处理超时问题

时间:2013-11-23 23:27:22

标签: python timeout multiprocessing

我在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()

1 个答案:

答案 0 :(得分:3)

嗯,这不起作用:

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

time.sleep不会返回任何内容,因此上述语句始终等同于if None:。 <{1}}在布尔上下文中是None,所以你去。

如果您希望始终终止,请取出False语句。只做一个if

另外,bug:

time.sleep

这不是你认为它正在做的事情。您需要指定p = multiprocessing.Process(target = crawl()) ,而不是target=crawl。后者在主线程中调用函数,前者将函数作为参数传递给target=crawl(),然后将并行执行。