Как я могу уменьшить использование процессора Python?
Вот ситуация:
Ниже приведена команда django. Я хочу постоянно сканировать таблицу EntityLimitTask
, статус которой not handle
и которая изменила статус на success
после некоторой работы
# command name is update_entity_info
import logging
from concurrent.futures import ThreadPoolExecutor
from functools import partial
from django.core.management.base import BaseCommand
from django.db.transaction import atomic
from django.conf import settings
from policy_insight.models import EntityLimitTask
from policy_insight.enums import PiTaskStatusEnum, EntityTypeEnum, AgentTypeEnum
from user_account.models import KaOEEntityInfo
from utils.common import GetOeTokens
logger = logging.getLogger('pi')
logger.setLevel("ERROR")
class Command(BaseCommand):
help = 'entity limit info'
def add_arguments(self, parser):
...
def handle(self, *args, **options):
import django.db
django.db.close_old_connections()
entity_limit_tasks = EntityLimitTask.objects.filter(handle_status=PiTaskStatusEnum.NOT_HANDLE, is_deleted=0)
with ThreadPoolExecutor(max_workers=10) as e:
e.map(partial(self._update_entity_limit_info, madhouse_token, bv_token), entity_limit_tasks)
@staticmethod
def _update_entity_limit_info(madhouse_token, bv_token, task):
try:
# do something
task.handle_status = PiTaskStatusEnum.SUCCESS
task.save()
except Exception:
import traceback as tb
logger.error("[update_entity_limit] with error: {}".format(tb.format_exc()))
Затем я пишу infinite loop
в shell-файле, например :
# update_entity_info.sh
source /path/to/bin/activate
while true
do
python /path/to/manage.py update_entity_limit --pythonpath /path/to/conf --settings settings
done
Но когда я запустил его, я обнаружил, что использование моего процессора очень высокое
top
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
21297 user 20 0 984.5m 50.4m 11.6m R 191.3 0.1 0:02.35 python /path/to/manage.py update_entity_limit --pythonpath /...
Как я могу провести некоторую оптимизацию, чтобы уменьшить использование процессора.
Спасибо