2017-08-03 42 views
0

我已经构建了一个无限循环运行的刮板。它还在10台以上的AWS机器上使用代理池。我想让它看起来像是一次IP碰到X次,那么它不应该再次被击中,到目前为止,我用MySQL来达到目的。问题是,如果所有代理完成配额,如何让它睡眠或延迟,并在新的一天获得新的生命。现在我没下,但最终它会终止整个程序:Python:如果某个条件满足,如何杀死或睡眠一个进程?

def parse(): 
    if random_proxy == '': # ALL Proxies finished quota for the day 
    raise Exception('Proxy Not Found') 
    r = session.get(u, headers=headers, proxies={'https': proxy_url}) 

if __name__ == '__main__': 
    idx = 0 
    exception_string = '' 
    POOL_COUNT = 50 
    try: 
    if conn is not None: 
     links = get_links(conn, POOL_COUNT) 
     if conn.open: 
      conn.close() 
      with Pool(POOL_COUNT) as p: 
      result = p.map(parse, links) 
except Exception as ex: 
     print('Main program exception') 
+0

阅读[同步原语](https://docs.python.org/3.6/library/multiprocessing.html#synchronization-primitives) – stovfl

回答

1

一个非常简单的方法来处理您的问题:

SLEEP_INTERVAL = 300 # 5 minutes 

def parse(): 
    random_proxy = get_random_proxy() 

    while not random_proxy: 
     # ALL Proxies finished quota for the day 
     time.sleep(SLEEP_INTERVAL) 
     random_proxy = get_random_proxy() 

    r = session.get(u, headers=headers, proxies={'https': proxy_url}) 

这将阻止你的工人,直到新的代理将可用。