python - Python & Docker 不清理线程
问题描述
我的服务器上有 docker,premium_daemon.py 作为守护进程清除数据库并取消订单。
premium_daemon.py
import time
from django.core.management import BaseCommand
from django.utils import timezone
from adminPanel.models import MyUser, Message, User_purchase, Bot_user, Item
from apiV1.bot_services import send_order_canceled
class Command(BaseCommand):
def handle(self, *args, **options):
while True:
users = MyUser.objects.filter(is_premium=True)
for user in users:
if user.premium_expiration_date < timezone.now():
user.is_premium = False
user.save()
messages = Message.objects.all()
for message in messages:
if timezone.now() > message.created_at + timezone.timedelta(days=7):
message.delete()
orders = User_purchase.objects.filter(is_paid=False)
for order in orders:
admin_user_obj = MyUser.objects.get(id=order.belongs)
if order.time_created + timezone.timedelta(minutes=admin_user_obj.booking_time) < timezone.now():
send_order_canceled(order)
bot_user = Bot_user.objects.get(belongs=order.belongs, chat_id=order.chat_id)
if order.balance_to_return:
bot_user.balance += order.balance_to_return
bot_user.active_orders -= 1
bot_user.save()
try:
item = Item.objects.get(id=order.item)
if item.strings == '':
item.strings = '\r\n'.join(order.strings.split('\n'))
else:
item.strings = '\r\n'.join((order.strings.replace('\n', '\r\n') + '\r\n' + item.strings).split('\r\n'))
item.quantity = len(item.strings.split('\r\n'))
item.save()
order.delete()
except:
pass
time.sleep(10)
码头工人-compose.prod
premium_daemon:
build: ./app
command: python manage.py premium_daemon
volumes:
- ./app/:/usr/src/app/
env_file:
- ./.env.prod
depends_on:
- db
运行 docker 20 分钟后我的 htop: htop
如您所见,我有 2400 个线程 premium_daemon.py
它是如何运作的?为什么python不清理线程?他们如何创建,我不使用线程。
如何清理线程?
解决方案
推荐阅读
- css - 在小型设备中,如何使用 bootstrap4 将顶部 div 放在底部,底部 div 放在顶部?
- ffmpeg - 使用ffmpeg复制时如何排除eia_608字幕?
- java - Akka如何连接source、flow和sink
- 32bit-64bit - 在 WebAssembly 中同时拥有 32 位和 64 位数字的基本原理是什么?
- ruby-on-rails - 录像机磁带导轨
- react-native - React-Native,组件间共享状态(react-native-router-flux)
- javascript - 使用 JavaScript 在窗口中获取当前查看的文本?
- sql - 对多列进行透视查询
- google-apps-script - 函数 NOW() + 设置时区(谷歌表格)
- docker - 弹性搜索 - APPSearch 主机不与 docker 一起使用