Как запускать потоки gevent в пакетах, не дожидаясь завершения каждого пакета, используя Gevent? - PullRequest
0 голосов
/ 06 февраля 2019

Я написал программу, которая будет выполнять 210 вызовов на 4 разных этапах во время выполнения моей программы.Он написан на Python 3.6 и использует Gevent (с патчем обезьяны).На каждом этапе он будет выполнять 50 вызовов, а затем запускать gevent.joinall () в указанных потоках.

Это обходной путь, который я реализовал, потому что достиг скорости в 50 вызовов / сек.Поэтому, когда я делаю эти вызовы, я беру по 50 за раз и пакетирую их (15-секундная задержка между ними, используя gevent.sleep (15))

Мой текущий обходной путь:

    def func(args, batch_size, batch):
        for i in range(0, len(args), batch_size):
            threads=[]
            for arg in args[i:i+batch_size]: 
                if func.__name__ == 'check_vsi':
                    if 'WIN' in self.history[arg]['order']['os_code']:
                         start_time = time.time()
                        threads.append(gevent.spawn(self.check_vsi, arg, start_time, 1800))
                    else:  wait 15 min
                        start_time = time.time()
                        threads.append(gevent.spawn(self.check_vsi, arg, start_time, 900))
                else:
                    print('Args are {}'.format(args))
                    threads.append(gevent.spawn(func, arg))

            gevent.joinall(threads)
            print('Sleeping for 15 seconds between batches')
            gevent.sleep(15) # sleep 15 seconds between batches
            _ = [results.append(t.value) for t in threads]:

Каждую партию можно представить как список порожденных гринлетных нитей.Есть ли способ запустить каждую партию (с 15-секундной задержкой), а затем дождаться завершения всех 210 (5 партий)?Или мне нужно подождать выполнения каждого пакета, прежде чем начинать следующий?

Пожалуйста, имейте в виду, что я храню ответы на эти вызовы, и ответы передаются через программу до конца, когда я делаю обновление базы данных.

...