- flask项目中使用schedule定时任务案例
张小特
flaskpython后端
pipinstallschedule代码importschedule#定义定时任务schedule.every().day.at("22:00").do(update_data)schedule.every().day.at("22:00").do(update_cumulative_data)#启动定时任务defrun_scheduler():whileTrue:schedule.run_pen
- Spring定时任务的fixedRate和fixedDelay两个属性以及开启多线程与线程池设置
家家小迷弟
workspringjavapython
1、定时注解以及多线程1.1、定时注解这里首先解释定时任务@Scheduled的两个属性fixedRate和fixedDelay,对于fixedDelay这个注解,就是等任务结束再开始计时,例如设置fixedDelay=5000,该方法执行需要2秒,那么再次执行的时间就是2秒+5秒=7秒,即在7秒后再次执行该任务。对于fixedRate注解我有个误解,例如设置fixedDelay=5000,我以为
- Spring---定时任务@Schedule的使用,及其参数使用yml或properties配置值
知北行
JavaSpringspringjava后端
1.使用1.在spring的启动类上添加允许定时任务注解@EnableScheduling2.在要定时执行的方法上添加注解:@Scheduled(fixedRate=5000)//任务每隔5秒执行一次或@Scheduled(fixDelay=5000)//任务每隔5秒执行一次(上一次任务结束5秒后,再执行下一次任务)或者可以使用cron表达式来完成更复杂的定时要求.2.使用yml或properti
- K8s架构与组件
稚辉君.MCA_P8_Java
kubernetes容器云原生网络
一、K8s架构在Master通常上包括kube-apiserver、etcd存储、kube-controller-manager、cloud-controller-manager、kube-scheduler和用于K8s服务的DNS服务器(插件)。这些对集群做出全局决策(比如调度),以及检测和响应集群事件的组件集合也称为控制平面。其实K8s官方并没有Master这一说,只是大多数安装工具(kube
- Spring-boot定时任务,注解@Scheduled的参数说明
旷野孤星
个人笔记学习记录后端框架JAVASpring-BootSpring@ScheduledJava
关于Scheduled的参数1.corn2.fixedDelay3.fixedDelayString4.fixedRate5.fixedRateString6.initialDelay7.initialDelayString8.zone总共有八种参数类型,对于第一种类型一般使用就最熟悉了,是可以控制方法在任意的年月日时分秒上执行,同时不断循环。比较简单,网上的说明也比较多,就不做解释。fixedR
- 2024年社区高光时刻总结!
数据库
亲爱的朋友们,让我们把时间的快门按下,一起回顾这一年的点点滴滴。就像翻阅一本精彩的相册,每一张照片都记录着我们ApacheDolphinScheduler社区的欢笑和泪水。那么,准备好了吗?让我们一起跳进时光机,回顾社区里2024年那些难忘的瞬间吧!时光荏苒,新年将至,2025年,愿我们所有人的梦想照进现实,愿所有愿美好如期而至!本文由白鲸开源科技提供发布支持!
- Apache DolphinScheduler 限制秒级别的定时调度
数据库
背景ApacheDolphinScheduler定时任务配置采用的7位Crontab表达式,分别对应秒、分、时、月天、月、周天、年。在团队日常开发工作中,工作流的定时调度一般不会细化到秒级别。但历史上出现过因配置的疏忽大意而产生故障时间,如应该配置每分钟执行的工作流被配置长了每秒执行,造成短时间内产生大量工作流实例,对ApacheDolphinScheduler服务可用性和提交任务的Hadoop集
- Quartz框架
mimi虾
Java框架quzrtzspringbootquartz
Quartz的介绍关于Quartz的介绍网上有很多很多,但是在浏览了很多的文章之后,在这里优先推荐给大家的有如下几个以供大家理解,在这里感谢作者的辛苦贡献。参考一(翻译版):https://xuzongbao.gitbooks.io/quartz/content/chapter1.html参考二(开发API):https://www.quartz-scheduler.org/api/2.2.1/i
- 从0到1搭建SpringBoot整合Quartz定时任务框架(保姆级教学+Gitee源码)
黄团团
SpringBootJavaSpringspringboot后端java
前言:这边我自己从0到1搭建了一套简化版的Quartz定时任务纯后端框架,把搭建的整个过程中的逻辑都在这篇博客写下来了,用于开源分享,干货满满!目录一、Quartz简介二、项目整体结构图三、代码实现3.1、导入pom.xml依赖3.2、ScheduleConstants常量类3.3、SysJob实体类3.4、SpringUtils工具类3.5、核心配置类3.5.1、JobExecuteUtils执
- quartz 架构详解
java我跟你拼了
#运维架构QuartzScheduler调度器Job作业Trigger触发器JobDetail作业详情JobDataMap上下文
Quartz是一个为Java服务量身定制的开源任务调度框架,通过触发器设置作业定时运行规则,控制作业的运行时间。以下是对Quartz架构的详细解析:1.Quartz的核心组件Quartz的架构由多个核心组件组成,每个组件都有特定的职责和功能。理解这些组件的工作原理是掌握Quartz使用的关键。1.1Scheduler(调度器)作用:Scheduler是Quartz的核心组件,负责管理所有任务的调度
- org.apache.dolphinscheduler.common.utils.HttpUtils:[73] - null: Name or service no 海豚调度器出现的调度状态问题!
松醪
clouderahadoop
【DolphinScheduler】org.apache.dolphinscheduler.common.utils.HttpUtils:[73]-null:Nameorservicenotknownjava.net.UnknownHostException:null:Nameorservicenotknown问题描述DolphinScheduler在执行时,遇到的问题,任务已经执行成功,但是调度
- Android Rxjava3 使用场景
2401_89760309
android
Observable>>hotKey=ApiManager.getInstance().getApiService().getHotKey();Observable.just(articleList).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).map(newFunction,Observable>>
- Spring之定时任务基本使用篇
后端springboot
Spring之定时任务基本使用篇spring-boot项目中,想添加一个定时任务,可以怎么办?不管什么项目,都是可以直接用JDK原生的定时任务来实现借助@Scheduled注解来使用本篇博文则主要集中在在SpringBoot项目中,怎么使用定时任务I.基本使用demo在SpringBoot项目中,使用定时任务需要先开启对应的配置,一个简单的demo如下代码解读复制代码@EnableScheduli
- DolphinScheduler × Jiron:打造高效智能的数据调度新生态
jiron开源
平台开发flink大数据hadoophivesqoopspringcloudsentinel
JironGitHub地址https://github.com/642933588/jiron-cloudhttps://gitee.com/642933588/jiron-cloudDolphinScheduler×Jiron:打造高效智能的数据调度新生态DolphinScheduler是一个开源的分布式任务调度平台,专为大数据场景下的工作流调度和数据治理而设计。将DolphinSchedule
- ospf收敛特性及其他的小特性
大丈夫立于天地间
hcie笔记智能路由器网络信息与通信学习算法网络协议
1.收敛特性快速收敛: ·只第一次计算时计算全部节点FullSPF ·增量最短路径优先算法I-SPF(Incremental) 只对受影响的节点进行路由计算 ·全部路由计算PRC 只对发生变化的路由进行重新计算; 根据I-SPF算出来的SPT来更新路由。开销:RPCOspf1 spf-schedule-intervalxxxxxxmax-interva为OSPF SPF计算的最长间隔时
- python的schedule模块
weijiuzhu007
python
这里写自定义目录标题一,schedule模块1.什么是schedule模块2.具体应用二,详细源码一,schedule模块1.什么是schedule模块schedule模块进行job管理,具体可以执行定时任务,schedule方法是串行的,也就是说,如果各个任务之间时间不冲突,那是没问题的;如果时间有冲突的话,会串行的执行命令2.具体应用1,安装方法pipinstallschedule2,使用im
- update_min_vruntime()流程图
iceman1952
cfsvruntime
linuxkernelschedulercfs的update_min_vruntime()看起来还挺绕的。含义其实也简单,总一句话,将cfs_rq->min_vruntime设置为:max(cfs_rq->vruntime,min(leftmost_se->vruntime,cfs_rq->curr->vruntime))。画个流程图,给它整个明明白白。//将cfs_rq->min_vruntim
- netty~ 基于netty实现服务端的长连接
17245
NIO~NettyNetty长连接心跳检测ScheduledFuture消息编码解码
描述socket长连接即服务端不断开客户端channel的连接,客户端需要定时向服务端进行心跳检测,服务端需要将过期未进行心跳检测的socket关闭。服务端关闭过期的channel连接:Netty提供了ScheduledFuture,可以通过ChannelHandlerContext.executor().schedule()创建,支持延时提交,也支持取消任务,为自动关闭提供了一个很好的实现方案。
- Python实现定时器的几种方式(超详细)
夏天Aileft
Pythonpython开发语言定时器
✨前言:在Python编程中,定时器是一种非常有用的工具,用于执行特定任务或函数,例如定时任务、轮询操作、定时检查等。Python提供了多种方式来创建和使用定时器,本文将介绍一些高级的定时器使用方式,包括使用threading模块、使用schedule库以及在异步编程中使用定时器。1使用time.sleep()结合循环这是最基础的计时方法,通过让程序暂停一定时间来实现简单的定时任务。#!/usr/
- MySQL Event Scheduler 详解
petunsecn
mysqlmysql数据库
官网文档:MySQL::MySQL8.4ReferenceManual::27.4.1EventSchedulerOverview一引入MySQL的EventScheduler(事件调度器)功能首次在MySQL5.1中引入,旨在让用户能够在数据库中定义和管理计划任务。它类似于操作系统中的任务调度工具(如Cron),但在MySQL中运行,主要用来自动执行周期性的任务或在特定时间点运行一次的任务。二作
- 批量修改pom.xml中的groupId
maven3shell
1、需求使用shell脚本批量修改pom.xml文件中的groupId可以通过sed命令来实现。下面是一个示例shell脚本,它会递归地查找当前目录及其子目录中的所有pom.xml文件,并将groupId从org.apache.dolphinscheduler修改为com.datashark2、脚本#!/bin/bash#定义旧的和新的groupIdOLD_GROUP_ID="org.apache
- Java爬虫框架(一)--架构设计
狼图腾-狼之传说
java框架java任务html解析器存储电子商务
一、架构图那里搜网络爬虫框架主要针对电子商务网站进行数据爬取,分析,存储,索引。爬虫:爬虫负责爬取,解析,处理电子商务网站的网页的内容数据库:存储商品信息索引:商品的全文搜索索引Task队列:需要爬取的网页列表Visited表:已经爬取过的网页列表爬虫监控平台:web平台可以启动,停止爬虫,管理爬虫,task队列,visited表。二、爬虫1.流程1)Scheduler启动爬虫器,TaskMast
- Redis Key的过期策略
ArchManual
分布式架构分布式Java后端微服务架构redis
Redis的过期策略主要是指管理和删除那些设定了过期时间的键,以确保内存的有效使用和数据的及时清理。具体来说,Redis有三种主要的过期策略:定期删除(ScheduledDeletion)、惰性删除(LazyDeletion)和内存淘汰策略(EvictionPolicies)。1.定期删除Redis的定期删除策略(ScheduledDeletion)的步骤如下:设置定期任务:Redis会在后台线程
- python logging模块默认日志级别_一看就懂,Python 日志 logging 模块详解及应用
路易·罗莎
pythonlogging模块默认日志级别
日志概述百度百科的日志概述:Windows网络操作系统都设计有各种各样的日志文件,如应用程序日志,安全日志、系统日志、Scheduler服务日志、FTP日志、WWW日志、DNS服务器日志等等,这些根据你的系统开启的服务的不同而有所不同。我们在系统上进行一些操作时,这些日志文件通常会记录下我们操作的一些相关内容,这些内容对系统安全工作人员相当有用。比如说有人对系统进行了IPC探测,系统就会在安全日志
- 商务英语 Level 2 Unit 1 Part 2
流非沫
Listening【DailySchedule】Maryisanemployeeatarealestatecompany.Thisisherdailyworkschedule.ShegoestoworkfromMondaytoFriday.Sheusuallyworksfrom9a.m.to5p.m.Shegetsupat7:30inthemorning.Sheleavesforworkat8:1
- K8S学习笔记02——K8S组件
沉淅尘
#Docker#K8Skubernetes
Kubernetes组件一、控制平面组件(ControlPlaneComponents)(1)kube-apiserver(2)etcd(3)kube-scheduler(4)kube-controller-manager(5)cloud-controller-manager二、Node组件1.kubelet2.kube-proxy3.容器运行时(ContainerRuntime)三、插件(Add
- 【Kubernetes】常见面试题汇总(十三)
summer.335
Kuberneteskubernetes容器云原生
目录39.简述KubernetesScheduler使用哪两种算法将Pod绑定到worker节点?40.简述Kuberneteskubelet的作用?41.简述Kuberneteskubelet监控Worker节点资源是使用什么组件来实现的?39.简述KubernetesScheduler使用哪两种算法将Pod绑定到worker节点?KubernetesScheduler根据如下两种调度算法将Po
- Ansible自动化部署kubernetes集群
theo.wu
kubernetesansible自动化
机器环境介绍1.1.机器信息介绍IPhostnameapplicationCPUMemory192.168.204.129k8s-master01etcd,kube-apiserver,kube-controller-manager,kube-scheduler,kubelet,kube-proxy,containerd2C4G192.168.204.130k8s-worker01etcd,kub
- 深入理解Kubernetes:kube-scheduler源码解析
mujingluo
kubernetes容器云原生
Kubernetes的调度器(kube-scheduler)是整个系统中至关重要的组件,它负责将待调度的Pods分配到合适的节点上。本文将深入分析kube-scheduler的源码,揭示其内部工作机制。kube-scheduler的核心功能kube-scheduler的核心功能包括:监听Pod变化:通过KubernetesAPI监听所有未调度的Pods。过滤(Filtering):根据一系列规则(
- 【2023年】云计算金砖牛刀小试4
geekgold
云计算linux容器jenkinskubernetes
容器云问题1.Kubernetes集群支持Pod优先级抢占,通过抢占式调度策略来实现同一个Node节点内部的Pod对象抢占。在master节点/root目录下编写YAML文件schedule.yaml创建一个抢占式调度策略,具体要求如下:(1)抢占式调度策略名称:high-scheduling;(2)优先级为1000000;(3)不要将该调度策略设置为默认优先调度策略。vischedule.yam
- 矩阵求逆(JAVA)初等行变换
qiuwanchi
矩阵求逆(JAVA)
package gaodai.matrix;
import gaodai.determinant.DeterminantCalculation;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
/**
* 矩阵求逆(初等行变换)
* @author 邱万迟
*
- JDK timer
antlove
javajdkschedulecodetimer
1.java.util.Timer.schedule(TimerTask task, long delay):多长时间(毫秒)后执行任务
2.java.util.Timer.schedule(TimerTask task, Date time):设定某个时间执行任务
3.java.util.Timer.schedule(TimerTask task, long delay,longperiod
- JVM调优总结 -Xms -Xmx -Xmn -Xss
coder_xpf
jvm应用服务器
堆大小设置JVM 中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制;系统的可用虚拟内存限制;系统的可用物理内存限制。32位系统下,一般限制在1.5G~2G;64为操作系统对内存无限制。我在Windows Server 2003 系统,3.5G物理内存,JDK5.0下测试,最大可设置为1478m。
典型设置:
java -Xmx
- JDBC连接数据库
Array_06
jdbc
package Util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class JDBCUtil {
//完
- Unsupported major.minor version 51.0(jdk版本错误)
oloz
java
java.lang.UnsupportedClassVersionError: cn/support/cache/CacheType : Unsupported major.minor version 51.0 (unable to load class cn.support.cache.CacheType)
at org.apache.catalina.loader.WebappClassL
- 用多个线程处理1个List集合
362217990
多线程threadlist集合
昨天发了一个提问,启动5个线程将一个List中的内容,然后将5个线程的内容拼接起来,由于时间比较急迫,自己就写了一个Demo,希望对菜鸟有参考意义。。
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CountDownLatch;
public c
- JSP简单访问数据库
香水浓
sqlmysqljsp
学习使用javaBean,代码很烂,仅为留个脚印
public class DBHelper {
private String driverName;
private String url;
private String user;
private String password;
private Connection connection;
privat
- Flex4中使用组件添加柱状图、饼状图等图表
AdyZhang
Flex
1.添加一个最简单的柱状图
? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
<?xml version=
"1.0"&n
- Android 5.0 - ProgressBar 进度条无法展示到按钮的前面
aijuans
android
在低于SDK < 21 的版本中,ProgressBar 可以展示到按钮前面,并且为之在按钮的中间,但是切换到android 5.0后进度条ProgressBar 展示顺序变化了,按钮再前面,ProgressBar 在后面了我的xml配置文件如下:
[html]
view plain
copy
<RelativeLa
- 查询汇总的sql
baalwolf
sql
select list.listname, list.createtime,listcount from dream_list as list , (select listid,count(listid) as listcount from dream_list_user group by listid order by count(
- Linux du命令和df命令区别
BigBird2012
linux
1,两者区别
du,disk usage,是通过搜索文件来计算每个文件的大小然后累加,du能看到的文件只是一些当前存在的,没有被删除的。他计算的大小就是当前他认为存在的所有文件大小的累加和。
- AngularJS中的$apply,用还是不用?
bijian1013
JavaScriptAngularJS$apply
在AngularJS开发中,何时应该调用$scope.$apply(),何时不应该调用。下面我们透彻地解释这个问题。
但是首先,让我们把$apply转换成一种简化的形式。
scope.$apply就像一个懒惰的工人。它需要按照命
- [Zookeeper学习笔记十]Zookeeper源代码分析之ClientCnxn数据序列化和反序列化
bit1129
zookeeper
ClientCnxn是Zookeeper客户端和Zookeeper服务器端进行通信和事件通知处理的主要类,它内部包含两个类,1. SendThread 2. EventThread, SendThread负责客户端和服务器端的数据通信,也包括事件信息的传输,EventThread主要在客户端回调注册的Watchers进行通知处理
ClientCnxn构造方法
&
- 【Java命令一】jmap
bit1129
Java命令
jmap命令的用法:
[hadoop@hadoop sbin]$ jmap
Usage:
jmap [option] <pid>
(to connect to running process)
jmap [option] <executable <core>
(to connect to a
- Apache 服务器安全防护及实战
ronin47
此文转自IBM.
Apache 服务简介
Web 服务器也称为 WWW 服务器或 HTTP 服务器 (HTTP Server),它是 Internet 上最常见也是使用最频繁的服务器之一,Web 服务器能够为用户提供网页浏览、论坛访问等等服务。
由于用户在通过 Web 浏览器访问信息资源的过程中,无须再关心一些技术性的细节,而且界面非常友好,因而 Web 在 Internet 上一推出就得到
- unity 3d实例化位置出现布置?
brotherlamp
unity教程unityunity资料unity视频unity自学
问:unity 3d实例化位置出现布置?
答:实例化的同时就可以指定被实例化的物体的位置,即 position
Instantiate (original : Object, position : Vector3, rotation : Quaternion) : Object
这样你不需要再用Transform.Position了,
如果你省略了第二个参数(
- 《重构,改善现有代码的设计》第八章 Duplicate Observed Data
bylijinnan
java重构
import java.awt.Color;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.Label;
import java.awt.TextField;
import java.awt.event.FocusAdapter;
import java.awt.event.FocusE
- struts2更改struts.xml配置目录
chiangfai
struts.xml
struts2默认是读取classes目录下的配置文件,要更改配置文件目录,比如放在WEB-INF下,路径应该写成../struts.xml(非/WEB-INF/struts.xml)
web.xml文件修改如下:
<filter>
<filter-name>struts2</filter-name>
<filter-class&g
- redis做缓存时的一点优化
chenchao051
redishadooppipeline
最近集群上有个job,其中需要短时间内频繁访问缓存,大概7亿多次。我这边的缓存是使用redis来做的,问题就来了。
首先,redis中存的是普通kv,没有考虑使用hash等解结构,那么以为着这个job需要访问7亿多次redis,导致效率低,且出现很多redi
- mysql导出数据不输出标题行
daizj
mysql数据导出去掉第一行去掉标题
当想使用数据库中的某些数据,想将其导入到文件中,而想去掉第一行的标题是可以加上-N参数
如通过下面命令导出数据:
mysql -uuserName -ppasswd -hhost -Pport -Ddatabase -e " select * from tableName" > exportResult.txt
结果为:
studentid
- phpexcel导出excel表简单入门示例
dcj3sjt126com
PHPExcelphpexcel
先下载PHPEXCEL类文件,放在class目录下面,然后新建一个index.php文件,内容如下
<?php
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);
if (PHP_SAPI == 'cli')
die('
- 爱情格言
dcj3sjt126com
格言
1) I love you not because of who you are, but because of who I am when I am with you. 我爱你,不是因为你是一个怎样的人,而是因为我喜欢与你在一起时的感觉。 2) No man or woman is worth your tears, and the one who is, won‘t
- 转 Activity 详解——Activity文档翻译
e200702084
androidUIsqlite配置管理网络应用
activity 展现在用户面前的经常是全屏窗口,你也可以将 activity 作为浮动窗口来使用(使用设置了 windowIsFloating 的主题),或者嵌入到其他的 activity (使用 ActivityGroup )中。 当用户离开 activity 时你可以在 onPause() 进行相应的操作 。更重要的是,用户做的任何改变都应该在该点上提交 ( 经常提交到 ContentPro
- win7安装MongoDB服务
geeksun
mongodb
1. 下载MongoDB的windows版本:mongodb-win32-x86_64-2008plus-ssl-3.0.4.zip,Linux版本也在这里下载,下载地址: http://www.mongodb.org/downloads
2. 解压MongoDB在D:\server\mongodb, 在D:\server\mongodb下创建d
- Javascript魔法方法:__defineGetter__,__defineSetter__
hongtoushizi
js
转载自: http://www.blackglory.me/javascript-magic-method-definegetter-definesetter/
在javascript的类中,可以用defineGetter和defineSetter_控制成员变量的Get和Set行为
例如,在一个图书类中,我们自动为Book加上书名符号:
function Book(name){
- 错误的日期格式可能导致走nginx proxy cache时不能进行304响应
jinnianshilongnian
cache
昨天在整合某些系统的nginx配置时,出现了当使用nginx cache时无法返回304响应的情况,出问题的响应头: Content-Type:text/html; charset=gb2312 Date:Mon, 05 Jan 2015 01:58:05 GMT Expires:Mon , 05 Jan 15 02:03:00 GMT Last-Modified:Mon, 05
- 数据源架构模式之行数据入口
home198979
PHP架构行数据入口
注:看不懂的请勿踩,此文章非针对java,java爱好者可直接略过。
一、概念
行数据入口(Row Data Gateway):充当数据源中单条记录入口的对象,每行一个实例。
二、简单实现行数据入口
为了方便理解,还是先简单实现:
<?php
/**
* 行数据入口类
*/
class OrderGateway {
/*定义元数
- Linux各个目录的作用及内容
pda158
linux脚本
1)根目录“/” 根目录位于目录结构的最顶层,用斜线(/)表示,类似于
Windows
操作系统的“C:\“,包含Fedora操作系统中所有的目录和文件。 2)/bin /bin 目录又称为二进制目录,包含了那些供系统管理员和普通用户使用的重要
linux命令的二进制映像。该目录存放的内容包括各种可执行文件,还有某些可执行文件的符号连接。常用的命令有:cp、d
- ubuntu12.04上编译openjdk7
ol_beta
HotSpotjvmjdkOpenJDK
获取源码
从openjdk代码仓库获取(比较慢)
安装mercurial Mercurial是一个版本管理工具。 sudo apt-get install mercurial
将以下内容添加到$HOME/.hgrc文件中,如果没有则自己创建一个: [extensions] forest=/home/lichengwu/hgforest-crew/forest.py fe
- 将数据库字段转换成设计文档所需的字段
vipbooks
设计模式工作正则表达式
哈哈,出差这么久终于回来了,回家的感觉真好!
PowerDesigner的物理数据库一出来,设计文档中要改的字段就多得不计其数,如果要把PowerDesigner中的字段一个个Copy到设计文档中,那将会是一件非常痛苦的事情。