SpringBoot的@Async注释的用法并例子
Posted 海边蓝贝壳
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringBoot的@Async注释的用法并例子相关的知识,希望对你有一定的参考价值。
在Spring Boot中,@Async注解用于将一个方法标记为异步执行的方法。使用该注解的方法将在一个单独的线程中异步执行,而不会阻塞调用线程。这对于处理需要长时间运行的任务或需要异步处理的任务非常有用。
下面是一个简单的示例:
@Service
public class MyService
@Async
public CompletableFuture<String> doSomething()
// 长时间运行的任务
// ...
return CompletableFuture.completedFuture("Task completed!");
在上面的示例中,doSomething()
方法被标记为异步方法,并返回一个CompletableFuture
对象,用于异步结果处理。
可以通过调用CompletableFuture.get()
方法获取异步结果:
@RestController
public class MyController
@Autowired
private MyService myService;
@GetMapping("/async")
public String doAsyncTask() throws InterruptedException, ExecutionException
CompletableFuture<String> future = myService.doSomething();
return future.get(); // 等待异步任务完成并返回结果
在上面的示例中,doAsyncTask()
方法将调用doSomething()
方法,并通过调用future.get()
方法等待异步任务完成并返回结果。由于doSomething()
方法是异步执行的,因此doAsyncTask()
方法不会阻塞调用线程,而是立即返回,这使得该方法在等待异步任务完成时可以处理其他请求。
类似于Java-SpringBoot @EnableAsync @Async注释的Python3.5异步执行
我想使用SpringBoot @EnableAsync @Async annotation模拟类似于Java中的异步python3.5函数。
在Spring中,使用@Async注释进行注释的方法,在方法调用之后,控制权立即返回到先前的方法。
import threading import re import subprocess x = None class Printer def caller(): if(x == True): x = False # Stop the prev executing while-loop. print('While-loop stopped & spawning a new one.') x = True p = threading.Thread(target=self.print_cpu_data()) p.start() print('Thread is Alive: {0}'.format(p.is_alive())) # This line never gets executed!!! # Ideally I want this function to return control to the caller function before executing # the code inside the print_cpu_data function def print_cpu_data(self): # At this point control should returned to the caller() function # while the rest of the execution continues behind the scenes. while x: cpu = subprocess.getoutput('cat /sys/class/thermal/thermal_zone0/temp') gpu = subprocess.getoutput('/opt/vc/bin/vcgencmd measure_temp') cpu = re.findall(r'[-+]?d*.?d+|[-+]?d+', cpu) gpu = re.findall(r'[-+]?d*.?d+|[-+]?d+', gpu) cpu = float(cpu[0]) / 1000 gpu = float(gpu[0]) print('CPU: {0:.2f}{2}C GPU: {1:.2f}{2}C'.format(cpu, gpu, '°')) time.sleep(1.0)
Python3.x中是否可能出现这种情况?在这样一个简单的案例上,我花了几个小时。
我想使用SpringBoot @EnableAsync @Async注释来模拟类似于Java中的异步python3.5函数。在Spring中,使用@Async注释进行注释的方法,控件是...
使用threading.Thread(target=self.print_cpu_data)
,而不是threading.Thread(target=self.print_cpu_data())
-请注意,括号已删除。您现在拥有的是在主线程中显式调用print_cpu_data()
,而不是将其发送给要调用的后台线程。因此,您的程序甚至无法创建/启动Thread
对象。
以上是关于SpringBoot的@Async注释的用法并例子的主要内容,如果未能解决你的问题,请参考以下文章