最新要闻
- 当前头条:日本最大啤酒商要重返中国:你爱日啤、德啤还是国啤?
- 3999元起 华为Vision智慧屏3开售:720P秒变4K
- 刀塔循环圈单机地图 刀塔循环圈-天天即时看
- “暖蜂驿站”温暖“两新”群体 相城区太平街道打造“15分钟暖蜂服务圈”-每日关注
- 首发2999元 联想百应新款迷你主机上架:13代i5、机身仅0.5L 全球快消息
- 满油满电续航1370公里 加速7秒内!吉利银河L7上市:13.87万起|世界观焦点
- NVIDIA发布535.98驱动更新:大幅提升《暗黑破坏神4》帧数 每日快讯
- 当前观察:4799元开售!一图看懂努比亚Z50 Ultra摄影师版:玻璃“皮革”独一家
- 市场监管总局:CCC认证制度实施以来,儿童玩具合格率显著提升 每日关注
- 从蔚小理到理小蔚 蔚来汽车做高端砸换电能否逆袭?|今日报
- 华为凌霄子母路由Q6E正式开售:电线变网线 全屋Wi-Fi满格
- 《小美人鱼》内地票房突破2000万!累计观影人次达54.7万 全球报道
- 摩尔线程显卡支持DX11游戏!国产第一家
- 针刺只是小儿科!吉利银河L7电池遭“蹂躏”:跌落水泡火烧撞击均无碍
- 航天宏图: 公司无人机业务:业务领域覆盖国土测绘、环保监测、河道监测、电力巡检、管道巡线、灾情监测等
- 或有剧毒!印度学生午餐中现20厘米死蛇:多人进餐后呕吐昏迷 环球要闻
广告
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
Quartz任务调度框架 世界报资讯
Quartz任务调度框架
Quartz是一个任务调度框架,用于定时执行任务。
任务调度:系统中有N的任务,分别需要在不同的时刻执行这些任务,这种多任务的执行策略就是任务调度
(资料图片仅供参考)
0 定时任务实现的方法
- spring schedule
- 优点:无需整合spring,作业类中就可以调用业务service
- 缺点:默认单线程执行任务,当前一个任务执行时间过长时,会使后面的任务延期执行,如果前一个任务的执行时间过长,可能会导致后面的任务执行时间不准确,最差的情况可能会丢任务;不能做数据存储型的定时任务;如果希望并发运行,需要配置线程池
- spring-quartz
- 优点:支持持久化
- 缺点:配置稍显复杂
定时任务持久化:当前定时任务保存在内存中,每当项目重启的时候,定时任务就会清空并重写加载,原来的一些执行信息就丢失了,我们需要在保存下定时任务的执行信息,下次重启项目的时候我们的定时任务就可以根据上次执行的状态再执行下一次的定时任务。
1.Spring schedule测试
使用默认的单线程
启动类 App.java
package org.example;import lombok.extern.slf4j.Slf4j;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.scheduling.annotation.EnableScheduling;@Slf4j@SpringBootApplication@EnableScheduling // 启动 spring taskpublic class App{ public static void main ( String[] args ) { SpringApplication.run(App.class,args); }}
TaskComponent.java
package org.example.component;import lombok.extern.slf4j.Slf4j;import org.springframework.scheduling.annotation.Scheduled;import org.springframework.stereotype.Component;@Component@Slf4jpublic class TaskComponent { // 定时任务1 每1秒执行一次,执行时间为10秒 @Scheduled(cron = "*/1 * * * * ?") public void task1() { log.info("task1-------当先线程的名字={}, id={}", Thread.currentThread().getName(),Thread.currentThread().getId()); try { Thread.sleep(1000 * 10); // int s = 2/0; // 模拟任务执行中抛出异常 } catch (InterruptedException e) { log.error("Thread sleep error {}", e.getMessage()); Thread.currentThread().interrupt(); } } // 定时任务2 每2秒执行一次 @Scheduled(cron = "*/2 * * * * ?") public void task2() { log.info("task2-------当先线程的名字={}, id={}", Thread.currentThread().getName(),Thread.currentThread().getId()); }}
运行启动类,观察输出
2023-05-31 20:57:44.009 INFO 44860 --- [ scheduling-1] org.example.component.TaskComponent : task2-------当先线程的名字=scheduling-1, id=362023-05-31 20:57:44.009 INFO 44860 --- [ scheduling-1] org.example.component.TaskComponent : task1-------当先线程的名字=scheduling-1, id=362023-05-31 20:57:54.024 INFO 44860 --- [ scheduling-1] org.example.component.TaskComponent : task2-------当先线程的名字=scheduling-1, id=362023-05-31 20:57:55.016 INFO 44860 --- [ scheduling-1] org.example.component.TaskComponent : task1-------当先线程的名字=scheduling-1, id=362023-05-31 20:58:05.027 INFO 44860 --- [ scheduling-1] org.example.component.TaskComponent : task2-------当先线程的名字=scheduling-1, id=362023-05-31 20:58:06.002 INFO 44860 --- [ scheduling-1] org.example.component.TaskComponent : task1-------当先线程的名字=scheduling-1, id=36
task2的执行时间为44秒,54秒,05秒
可以看到task2由于task1任务的阻塞,导致task2不能按照预想的每2秒执行一次。
用的时候注意不要将定时任务的时间设置的过于接近。
使用多线程
需要做的事情:
- 启动类上加上
@EnableAsync
- task 上加上
@Async
运行启动类,观察输出
2023-05-31 21:10:37.025 INFO 28216 --- [ task-1] org.example.component.TaskComponent : task1-------当先线程的名字=task-1, id=392023-05-31 21:10:38.007 INFO 28216 --- [ task-2] org.example.component.TaskComponent : task1-------当先线程的名字=task-2, id=422023-05-31 21:10:38.008 INFO 28216 --- [ task-3] org.example.component.TaskComponent : task2-------当先线程的名字=task-3, id=432023-05-31 21:10:39.005 INFO 28216 --- [ task-4] org.example.component.TaskComponent : task1-------当先线程的名字=task-4, id=462023-05-31 21:10:40.002 INFO 28216 --- [ task-5] org.example.component.TaskComponent : task2-------当先线程的名字=task-5, id=482023-05-31 21:10:40.002 INFO 28216 --- [ task-6] org.example.component.TaskComponent : task1-------当先线程的名字=task-6, id=492023-05-31 21:10:41.014 INFO 28216 --- [ task-7] org.example.component.TaskComponent : task1-------当先线程的名字=task-7, id=522023-05-31 21:10:42.014 INFO 28216 --- [ task-3] org.example.component.TaskComponent : task1-------当先线程的名字=task-3, id=432023-05-31 21:10:42.014 INFO 28216 --- [ task-8] org.example.component.TaskComponent : task2-------当先线程的名字=task-8, id=552023-05-31 21:10:43.015 INFO 28216 --- [ task-5] org.example.component.TaskComponent : task1-------当先线程的名字=task-5, id=482023-05-31 21:10:44.009 INFO 28216 --- [ task-8] org.example.component.TaskComponent : task2-------当先线程的名字=task-8, id=55
可以看到两个任务的执行时间互不影响,并且线程id也不相同,说明是多线程执行任务。
但是,这种方式,会引发另外的问题,task1会多次执行。我们希望上一个task1未执行完成的时候,下一个task1不执行。
使用线程池
task类注释掉 @Async
,并且配置如下的配置类
package org.example.config;import lombok.extern.slf4j.Slf4j;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.scheduling.annotation.SchedulingConfigurer;import org.springframework.scheduling.config.ScheduledTaskRegistrar;import java.util.concurrent.Executor;import java.util.concurrent.Executors;@Configuration@Slf4jpublic class TaskConfig implements SchedulingConfigurer { @Override public void configureTasks(ScheduledTaskRegistrar taskRegistrar) { // 为springtask配置线程池 taskRegistrar.setScheduler(taskExecutor()); } // 创建线程池 @Bean public Executor taskExecutor(){ return Executors.newScheduledThreadPool(10); }}
2023-05-31 21:24:18.007 INFO 29676 --- [pool-1-thread-1] org.example.component.TaskComponent : task2-------当先线程的名字=pool-1-thread-1, id=362023-05-31 21:24:18.007 INFO 29676 --- [pool-1-thread-1] org.example.component.TaskComponent : task2 执行完了,线程的名字=pool-1-thread-1, id=362023-05-31 21:24:18.008 INFO 29676 --- [pool-1-thread-2] org.example.component.TaskComponent : task1-------当先线程的名字=pool-1-thread-2, id=372023-05-31 21:24:20.002 INFO 29676 --- [pool-1-thread-1] org.example.component.TaskComponent : task2-------当先线程的名字=pool-1-thread-1, id=362023-05-31 21:24:20.002 INFO 29676 --- [pool-1-thread-1] org.example.component.TaskComponent : task2 执行完了,线程的名字=pool-1-thread-1, id=362023-05-31 21:24:22.009 INFO 29676 --- [pool-1-thread-3] org.example.component.TaskComponent : task2-------当先线程的名字=pool-1-thread-3, id=392023-05-31 21:24:22.009 INFO 29676 --- [pool-1-thread-3] org.example.component.TaskComponent : task2 执行完了,线程的名字=pool-1-thread-3, id=392023-05-31 21:24:24.006 INFO 29676 --- [pool-1-thread-1] org.example.component.TaskComponent : task2-------当先线程的名字=pool-1-thread-1, id=362023-05-31 21:24:24.006 INFO 29676 --- [pool-1-thread-1] org.example.component.TaskComponent : task2 执行完了,线程的名字=pool-1-thread-1, id=362023-05-31 21:24:26.006 INFO 29676 --- [pool-1-thread-4] org.example.component.TaskComponent : task2-------当先线程的名字=pool-1-thread-4, id=442023-05-31 21:24:26.006 INFO 29676 --- [pool-1-thread-4] org.example.component.TaskComponent : task2 执行完了,线程的名字=pool-1-thread-4, id=442023-05-31 21:24:28.015 INFO 29676 --- [pool-1-thread-3] org.example.component.TaskComponent : task2-------当先线程的名字=pool-1-thread-3, id=392023-05-31 21:24:28.015 INFO 29676 --- [pool-1-thread-2] org.example.component.TaskComponent : task1 执行完了,线程的名字=pool-1-thread-2, id=372023-05-31 21:24:28.015 INFO 29676 --- [pool-1-thread-3] org.example.component.TaskComponent : task2 执行完了,线程的名字=pool-1-thread-3, id=392023-05-31 21:24:29.011 INFO 29676 --- [pool-1-thread-5] org.example.component.TaskComponent : task1-------当先线程的名字=pool-1-thread-5, id=492023-05-31 21:24:30.010 INFO 29676 --- [pool-1-thread-1] org.example.component.TaskComponent : task2-------当先线程的名字=pool-1-thread-1, id=362023-05-31 21:24:30.010 INFO 29676 --- [pool-1-thread-1] org.example.component.TaskComponent : task2 执行完了,线程的名字=pool-1-thread-1, id=362023-05-31 21:24:32.008 INFO 29676 --- [pool-1-thread-6] org.example.component.TaskComponent : task2-------当先线程的名字=pool-1-thread-6, id=542023-05-31 21:24:32.008 INFO 29676 --- [pool-1-thread-6] org.example.component.TaskComponent : task2 执行完了,线程的名字=pool-1-thread-6, id=542023-05-31 21:24:34.001 INFO 29676 --- [pool-1-thread-6] org.example.component.TaskComponent : task2-------当先线程的名字=pool-1-thread-6, id=542023-05-31 21:24:34.001 INFO 29676 --- [pool-1-thread-6] org.example.component.TaskComponent : task2 执行完了,线程的名字=pool-1-thread-6, id=54
观察日志输出,可以看出task1是上一个执行结束之后,下一个task1才会继续执行
2.Spring-quartz框架
导入依赖
org.springframework.boot spring-boot-starter-quartz
QuartzTask1.java
package org.example.component;import lombok.extern.slf4j.Slf4j;import org.quartz.DisallowConcurrentExecution;import org.quartz.JobExecutionContext;import org.quartz.JobExecutionException;import org.springframework.scheduling.quartz.QuartzJobBean;import org.springframework.stereotype.Component;@Slf4j@Component@DisallowConcurrentExecutionpublic class QuartzTask2 extends QuartzJobBean { @Override protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException { log.info("task2任务执行开始,线程id={}", Thread.currentThread().getId()); log.info("task2任务执行结束,线程id={}", Thread.currentThread().getId()); }}
QuartzTask2.java
package org.example.component;import lombok.extern.slf4j.Slf4j;import org.quartz.DisallowConcurrentExecution;import org.quartz.JobExecutionContext;import org.quartz.JobExecutionException;import org.springframework.scheduling.quartz.QuartzJobBean;import org.springframework.stereotype.Component;@Slf4j@Component@DisallowConcurrentExecutionpublic class QuartzTask2 extends QuartzJobBean { @Override protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException { log.info("task2任务执行开始,线程id={}", Thread.currentThread().getId()); log.info("task2任务执行结束,线程id={}", Thread.currentThread().getId()); }}
QuartzConfig.java
package org.example.config;import lombok.extern.slf4j.Slf4j;import org.example.component.QuartzTask1;import org.example.component.QuartzTask2;import org.quartz.*;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;@Slf4j@Configurationpublic class QuartzConfig { @Bean public JobDetail task1_job() { // JobDetail 需要加入 storeDurably() 不然会报错 return JobBuilder.newJob(QuartzTask1.class).storeDurably().build(); } @Bean public JobDetail task2_job() { return JobBuilder.newJob(QuartzTask2.class).storeDurably().build(); } @Bean public Trigger task1_trigger() { CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule("*/1 * * * * ?"); return TriggerBuilder.newTrigger() .forJob(task1_job()) .withIdentity("task1") .withSchedule(scheduleBuilder) .build(); } @Bean public Trigger task2_trigger() { CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule("*/2 * * * * ?"); return TriggerBuilder.newTrigger() .forJob(task2_job()) .withIdentity("task2") .withSchedule(scheduleBuilder) .build(); }}
2023-05-31 21:53:42.012 INFO 50100 --- [eduler_Worker-2] org.example.component.QuartzTask2 : task2任务执行开始,线程id=252023-05-31 21:53:42.012 INFO 50100 --- [eduler_Worker-2] org.example.component.QuartzTask2 : task2任务执行结束,线程id=252023-05-31 21:53:44.013 INFO 50100 --- [eduler_Worker-3] org.example.component.QuartzTask2 : task2任务执行开始,线程id=262023-05-31 21:53:44.013 INFO 50100 --- [eduler_Worker-3] org.example.component.QuartzTask2 : task2任务执行结束,线程id=262023-05-31 21:53:46.010 INFO 50100 --- [eduler_Worker-4] org.example.component.QuartzTask2 : task2任务执行开始,线程id=272023-05-31 21:53:46.010 INFO 50100 --- [eduler_Worker-4] org.example.component.QuartzTask2 : task2任务执行结束,线程id=272023-05-31 21:53:48.004 INFO 50100 --- [eduler_Worker-5] org.example.component.QuartzTask2 : task2任务执行开始,线程id=282023-05-31 21:53:48.004 INFO 50100 --- [eduler_Worker-5] org.example.component.QuartzTask2 : task2任务执行结束,线程id=282023-05-31 21:53:50.003 INFO 50100 --- [eduler_Worker-6] org.example.component.QuartzTask2 : task2任务执行开始,线程id=292023-05-31 21:53:50.003 INFO 50100 --- [eduler_Worker-6] org.example.component.QuartzTask2 : task2任务执行结束,线程id=292023-05-31 21:53:51.823 INFO 50100 --- [eduler_Worker-1] org.example.component.QuartzTask1 : task1任务执行结束,线程id=242023-05-31 21:53:51.824 INFO 50100 --- [eduler_Worker-7] org.example.component.QuartzTask1 : task1任务执行开始,线程id=302023-05-31 21:53:52.017 INFO 50100 --- [eduler_Worker-8] org.example.component.QuartzTask2 : task2任务执行开始,线程id=312023-05-31 21:53:52.017 INFO 50100 --- [eduler_Worker-8] org.example.component.QuartzTask2 : task2任务执行结束,线程id=312023-05-31 21:53:54.008 INFO 50100 --- [eduler_Worker-9] org.example.component.QuartzTask2 : task2任务执行开始,线程id=322023-05-31 21:53:54.008 INFO 50100 --- [eduler_Worker-9] org.example.component.QuartzTask2 : task2任务执行结束,线程id=322023-05-31 21:53:56.012 INFO 50100 --- [duler_Worker-10] org.example.component.QuartzTask2 : task2任务执行开始,线程id=332023-05-31 21:53:56.012 INFO 50100 --- [duler_Worker-10] org.example.component.QuartzTask2 : task2任务执行结束,线程id=332023-05-31 21:53:58.009 INFO 50100 --- [eduler_Worker-2] org.example.component.QuartzTask2 : task2任务执行开始,线程id=252023-05-31 21:53:58.010 INFO 50100 --- [eduler_Worker-2] org.example.component.QuartzTask2 : task2任务执行结束,线程id=252023-05-31 21:54:00.009 INFO 50100 --- [eduler_Worker-3] org.example.component.QuartzTask2 : task2任务执行开始,线程id=262023-05-31 21:54:00.009 INFO 50100 --- [eduler_Worker-3] org.example.component.QuartzTask2 : task2任务执行结束,线程id=262023-05-31 21:54:01.826 INFO 50100 --- [eduler_Worker-7] org.example.component.QuartzTask1 : task1任务执行结束,线程id=302023-05-31 21:54:01.827 INFO 50100 --- [eduler_Worker-4] org.example.component.QuartzTask1 : task1任务执行开始,线程id=272023-05-31 21:54:02.002 INFO 50100 --- [eduler_Worker-5] org.example.component.QuartzTask2 : task2任务执行开始,线程id=282023-05-31 21:54:02.003 INFO 50100 --- [eduler_Worker-5] org.example.component.QuartzTask2 : task2任务执行结束,线程id=282023-05-31 21:54:04.011 INFO 50100 --- [eduler_Worker-6] org.example.component.QuartzTask2 : task2任务执行开始,线程id=292023-05-31 21:54:04.011 INFO 50100 --- [eduler_Worker-6] org.example.component.QuartzTask2 : task2任务执行结束,线程id=292023-05-31 21:54:06.004 INFO 50100 --- [eduler_Worker-1] org.example.component.QuartzTask2 : task2任务执行开始,线程id=242023-05-31 21:54:06.004 INFO 50100 --- [eduler_Worker-1] org.example.component.QuartzTask2 : task2任务执行结束,线程id=242023-05-31 21:54:08.012 INFO 50100 --- [eduler_Worker-8] org.example.component.QuartzTask2 : task2任务执行开始,线程id=312023-05-31 21:54:08.012 INFO 50100 --- [eduler_Worker-8] org.example.component.QuartzTask2 : task2任务执行结束,线程id=312023-05-31 21:54:10.011 INFO 50100 --- [eduler_Worker-9] org.example.component.QuartzTask2 : task2任务执行开始,线程id=322023-05-31 21:54:10.012 INFO 50100 --- [eduler_Worker-9] org.example.component.QuartzTask2 : task2任务执行结束,线程id=322023-05-31 21:54:11.828 INFO 50100 --- [eduler_Worker-4] org.example.component.QuartzTask1 : task1任务执行结束,线程id=272023-05-31 21:54:11.828 INFO 50100 --- [duler_Worker-10] org.example.component.QuartzTask1 : task1任务执行开始,线程id=33
通过日志输出,可以看到,quartz达到了,springtask使用线程池的效果。
单个任务的串行执行,使用的注解
@DisallowConcurrentExecution
不允许并行执行
quartz的核心一共有三个类
- 任务 Job :需要执行的任务逻辑类,需要实现 Job 接口的 execute 方法
- 触发器 Trigger :执行任务的调度器。例如,每天的00:00执行任务A,那么就需要设置Trigger的属性
- 调度器 Scheduler : 任务的调度器,将任务 Job和触发器Trigger整合起来,负责基于Trigger设定的时间执行任务Job
关键词:
Quartz任务调度框架 世界报资讯
视点!掌握嵌入式Linux编程0简介
月度回望|“资产荒”逻辑未破 5月债市现券收益率曲线陡峭下移
当前头条:日本最大啤酒商要重返中国:你爱日啤、德啤还是国啤?
3999元起 华为Vision智慧屏3开售:720P秒变4K
刀塔循环圈单机地图 刀塔循环圈-天天即时看
React Native+小程序容器=更高的开发效率_焦点热门
全球热议:uniapp uni-number-box组件 步长为1,还能输入小数思路分享
Linux工作原理3设备 天天简讯
2023-05-31:给定一个整数数组 A,你可以从某一起始索引出发,跳跃一定次数 在你跳跃的过程中,第 1、3、5... 次跳跃称为奇数跳跃 而第 2、4、6
世界微动态丨货币市场日报:5月31日
“暖蜂驿站”温暖“两新”群体 相城区太平街道打造“15分钟暖蜂服务圈”-每日关注
首发2999元 联想百应新款迷你主机上架:13代i5、机身仅0.5L 全球快消息
满油满电续航1370公里 加速7秒内!吉利银河L7上市:13.87万起|世界观焦点
NVIDIA发布535.98驱动更新:大幅提升《暗黑破坏神4》帧数 每日快讯
当前观察:4799元开售!一图看懂努比亚Z50 Ultra摄影师版:玻璃“皮革”独一家
c#使用内存映射像处理内存一样去快速处理文件_全球热头条
重学c#系列——DiagnosticListener [三十五]|每日热门
市场监管总局:CCC认证制度实施以来,儿童玩具合格率显著提升 每日关注
从蔚小理到理小蔚 蔚来汽车做高端砸换电能否逆袭?|今日报
华为凌霄子母路由Q6E正式开售:电线变网线 全屋Wi-Fi满格
《小美人鱼》内地票房突破2000万!累计观影人次达54.7万 全球报道
摩尔线程显卡支持DX11游戏!国产第一家
针刺只是小儿科!吉利银河L7电池遭“蹂躏”:跌落水泡火烧撞击均无碍
天天热头条丨记录--Js基础练习题目
Apache DolphinScheduler 3.0.6 发布,或将是最后一个 3.0.X 版本|当前播报
债市日报:5月31日
航天宏图: 公司无人机业务:业务领域覆盖国土测绘、环保监测、河道监测、电力巡检、管道巡线、灾情监测等
或有剧毒!印度学生午餐中现20厘米死蛇:多人进餐后呕吐昏迷 环球要闻
风头盖过马斯克访华 贾跃亭新车220万开卖!FF 91最全解析 世界速递
全球今日讯!新型太阳能电池问世:柔韧性极高 弯曲角度可超360度
中兴晴天墙面路由器上手:新一代WiFi 6穿墙神器
明星餐饮为何逃不出短命魔咒?专家解释原因 全球速读
深圳电网用电负荷连续第三年突破2000万千瓦 当前热点
1499元起 OPPO K11x今晚开售:1亿像素+67W快充
全球今亮点!618最值得买的数码好物!华为家庭存储七大核心优势:比NAS好用多了
四川南充暴雨 下水道喷出1米高水柱!网友:趵突泉南充分泉
预售18:00截止!B站大会员年卡仅需88元
世界热议:手机PC秒变4TB硬盘空间!华为家庭存储图赏
理论+实操|一文掌握 RFM 模型在客户数据洞察平台内的落地实战|焦点速讯
热讯:TSN流量记录器:验证汽车网络中的以太网聚合,经济高效的解决方案
MySQL之常用数据类型
Spring MVC官方文档学习笔记(二)之DispatcherServlet
Python海龟有了新技能,这回画了个印度美女。它正在一丝不苟地给它画像,Python洪水填充fill命令用法。-微动态
天天报道:杀疯了!比亚迪新款元Pro上市:9.58万起 比预售价低4000
【环球速看料】海外版“坦克300”即将国产? 福特烈马国内路试谍照曝光!
台湾大王具足虫拉面341元一碗 学者:海蟑螂远亲 可能会中毒
日本赛马撞线后猝死:前骑手嘲讽哀悼网友“伪君子”引争议
今日要闻!苹果618大跌:iPhone 12/256GB 3499元、iPhone 14 4999元
仙佑医药科技有限公司怎么样? 仙佑集团口碑为什么这么好?
视觉盛宴:探索可视化大屏的无限魅力 世界独家
1.动态数组
TMC2160步进电机驱动芯片
简易视频直播系统的搭建实践
TF无法识别问题分析_环球观速讯
【环球聚看点】数据真空期机构情绪持稳 日债收益率多数小幅回落
世界滚动:收评:五月收官!创业板指跌超1% 英伟达概念股活跃
全球观焦点:2099元!尼康尼克尔Z DX 24mm f/1.7正式发布:夜拍画质绝
最新快讯!新掌机或将用上:高通与索尼、任天堂磋商掌机芯片
vivo S17系列发布:拍人像最好的手机 2499元起
微速讯:269元 vivo TWS Air Pro耳机发布:3D全景音频、续航长达30小时
前置5000万广角柔光!vivo S17 Pro图赏
绍兴二手车交易市场1万2万_绍兴二手车交易市场
别再满屏找日志了!推荐一款 IDEA 日志管理插件,看日志轻松多了!
docker安装redis-世界快讯
天天即时:方萍萍:黄金短期应该是要调整一下
华为最贵笔记本!MateBook X Pro微绒典藏版开卖:13999元
AI可能灭绝人类!ChatGPT之父发出警告:三巨头AI公司CEO力挺-全球快看点
【播资讯】九年造一车!贾跃亭感谢李想支持:期待来FF洛杉矶总部交流指导
两年前魅族18系列“宝刀未老”!获Flyme 10首个稳定版全量推送
女子酒驾后谎称喝了藿香正气水 结果被一招识破 环球动态
人物传记《当今奇人周兴和》七十二 春风得意马蹄急 新视野
每日资讯:基于 Web 实现 m3u8 视频播放的简单应用示例
【经验分享】锐捷EVE在火狐游览器中,取消一律打开此应用的选项,重新选择默认打开应用,如SecureCRT-动态焦点
当前讯息:淘宝太细了:mysql 和 es 的5个一致性方案,你知道吗?
世界热点!2022 Kube-OVN开源社区年度报告
天天视讯!可配置Modbus网关 嵌入式设备联网解决方案
从三岁到八十二岁的武则天(转载)---王晓磊著 之简介|每日视讯
现场视频可怕!四川一特斯拉撞飞路人致身亡:被撞者腾空而起-热门
6月1日开市!大观园早市回来啦
全球视讯!69㎡三房,72㎡四房,广州的户型都卷成这样了?
可视化探索开源项目的 contributor 关系 环球最新
蛋白质纳米“计算机”问世:未来有望治疗癌症
贾跃亭造车梦成 李想:理想很多优秀负责人都来自法拉第未来 当前信息
快看:高颜值更有强悍性能 超频可解锁200W!影驰RTX 4060 Ti星曜OC显卡评测
砸手里了!推特估值大减:只剩马斯克收购价三分之一
马斯克高调收购“看走眼”?Twitter最新估值大跌近70%_世界时快讯
火狐也将放弃旧平台:Firefox 115将是支持Win7/8.1最后版本
环球新动态:MySQL之DDL表创建及DML数据处理操作
今日视点:直播软件源码,审核的“中坚力量”鉴黄功能!
环球快消息!福星股份董秘回复:截止5月29日公司股东人数约为5.48万
仓网升级,链通全国 顺丰供应链为小米打造原料央仓
性能超苹果A17 天玑9300卷出新高度:4个X4超大核详细规格出炉
【新视野】捷克一女婴出生2天就被母亲打耳洞 妈妈:应该是不疼的
微星发布全新Z790系主板:首次支持Wi-Fi 7 及5千兆网卡 世界热消息
又稳又圆 比亚迪仰望U8原地掉头为何这么慢?比快更难实现!
肯德基麦当劳儿童节玩具断货:黄牛线上倒卖 焦点热门
猛打价格战,手术机器人市场要变天了
柏子滋心丸怎么样
稳增长政策接续发力预期升温 每日快讯