最近在做一些调用python的工作,不需要接收python的返回值,因为调用比较耗时,所以这里采用异步线程的方式实现:
在 applicationContext.xml 里配置如下代码:
<!-- 异步线程池 -->
<bean id="threadPoolTaskExecutor"class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
<!-- 核心线程数 -->
<property name="corePoolSize" value="20" />
<!-- 最大线程数 -->
<property name="maxPoolSize" value="120" />
<!-- 队列最大长度 >=mainExecutor.maxSize -->
<property name="queueCapacity" value="120" />
<!-- 线程池维护线程所允许的空闲时间 -->
<property name="keepAliveSeconds" value="1000" />
<!-- 线程池对拒绝任务(无线程可用)的处理策略 ThreadPoolExecutor.CallerRunsPolicy策略 ,调用者的线程会执行该任务,如果执行器已关闭,则丢弃. -->
<property name="rejectedExecutionHandler">
<bean class="java.util.concurrent.ThreadPoolExecutor$CallerRunsPolicy" />
</property>
</bean>
使用:
@Autowired
private ThreadPoolTaskExecutor taskExecutor;
taskExecutor.execute(new Runnable() {
@Override
public void run() {
PythonInterfaceVisitUtil.callPython(params, pyProjectPath);
}
});