Многопроцессорная обработка Python - есть ли способ убедиться, что процесс Python останавливается после выполнения программы - PullRequest
0 голосов
/ 08 января 2019

Использование пула с множественной обработкой для попадания в API и сохранения ответа в mysql для примерно 5 тыс. Запросов. Программа никогда не завершается даже после полного выполнения. Обнаружено, что это происходит, поскольку процессы все еще открыты после выполнения.

Пробовал с помощью join (), terminate (). Ничего не работает.

    def fetchAndStore(query):
        conn = pymysql.connect(host=host,
                                 user=user,
                                 passwd=passwd,
                                 db=db)

        x = conn.cursor()
        full_url = getFullUrl(redirection_service, query)
        response = urllib2.urlopen(full_url)
        html = response.read()
        data = json.loads(html)
        if data is not None:
             store =  json.dumps(data["RESPONSE"]["redirectionStore"])
        else:
             store = 'search.flipkart.com'
        try:
            stmt = "INSERT INTO golden_response(`store`) VALUES ('%s')" %( store)
            x.execute(stmt)
            conn.commit()
            conn.close()
        except Exception, e:
            global failure
            failure += 1
            print e
          return "Done"
   #main
   queries = db_connection()
   pool = Pool(processes=20, maxtasksperchild=5)
   results = []
   for query in queries:
       results.append(pool.apply_async(fetchAndStore, (query,)))

   pool.close()
   pool.join()
   print "completed"

Процесс должен завершиться, и печать завершена в идеальной ситуации.

...