Удалить/уничтожить законченное фьючерс Asyncio PythonPython

Программы на Python
Ответить
Anonymous
 Удалить/уничтожить законченное фьючерс Asyncio Python

Сообщение Anonymous »

У меня есть сценарий Python, который использует Asyncio для получения более миллиона запросов. Сначала я столкнулся с проблемами памяти, а затем обнаружил семафоры, с тех пор я успешно реализовал семафор, чтобы ограничить количество одновременных задач, а также задачи в очереди одновременно. < /p>

Моя программа загружает список запросов, подобных этим: < /p>

Код: Выделить всё

        with open(wordlist) as words:
w = words.read().splitlines()
Затем этот список передается следующей функции для обработки, и фактическая работа выполняется.

Код: Выделить всё

async def _process_dns_wordlist(self, wordlist, domain):
"""Takes a list of words and adds them to the task list as space is available"""
for word in wordlist:
# Wait on the semaphore before adding more tasks
await self.sem.acquire()
host = '{}.{}'.format(word, domain)
task = asyncio.ensure_future(self._dns_lookup(host))
task.add_done_callback(functools.partial(self._dns_result_callback, host))
self.tasks.append(task)
await asyncio.gather(*self.tasks, return_exceptions=True)
До того, как я реализовал семафор, программа просто вылетала из-за нехватки памяти, когда я ставил в очередь все задачи, теперь она работает некоторое время, а затем вылетает, потому что она работает нехватка памяти примерно на половине пути выполнения запросов.

Я предполагаю, что это потому, что после того, как будущее обрабатывается моим обратным вызовом, оно остается в памяти, тратя впустую пространство. Моя проблема в том, что я не могу понять, что использовать, чтобы удалить обработанное будущее, как только я с ним закончу. Я прочитал документацию asyncio и не вижу метода уничтожения/удаления. Я упускаю что-то действительно очевидное?

Спасибо за помощь!

Подробнее здесь: https://stackoverflow.com/questions/446 ... cio-python
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»