连接池、线程池、定时任务、应用启动

/*
   启动一个java app或者服务
*/

import org.eclipse.jetty.server.Server;

public class QuartzTest  {

    /** *//**
     * @param args
     */
    public static void main(String[] args) throws Exception {

        Server server = new Server(8899);
        server.setHandler(new ScheduleRouteHandle());
        System.out.println("启动服务");
        server.start();
        server.join();

    }

}

  

/*
   启动一个定时任务,或者监听请求
*/

import org.eclipse.jetty.server.Request;
import org.eclipse.jetty.server.handler.AbstractHandler;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import java.util.logging.Logger;

/**
 * Created by 8899man on 16/6/16.
 */
public class ScheduleRouteHandle extends AbstractHandler {
    //public class ScheduleRouteHandle extends AbstractHandler {

    //private final Logger logger = Logger.getLogger(ScheduleRouteHandle.class);

    static{

        System.out.println("static调用");
        // TODO Auto-generated method stub
        SimpleDateFormat DateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
        Date d = new Date();
        String returnstr = DateFormat.format(d);

        CreateVmJob job = new CreateVmJob();
        String job_name ="create_vm";
        try {
            System.out.println(returnstr+ "【系统启动】");
            QuartzManager.addJob(job_name,job,"0/5 * * * * ?"); //每2秒钟执行一次

        }  catch (Exception e) {
            e.printStackTrace();
        }

    }

    public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
        //log(target, request);
        System.out.println("调用");
        // TODO Auto-generated method stub
        SimpleDateFormat DateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
        Date d = new Date();
        String returnstr = DateFormat.format(d);

        TestJob job = new TestJob();
        String job_name ="11";
        try {
            System.out.println(returnstr+ "【系统启动】");
            QuartzManager.addJob(job_name,job,"0/5 * * * * ?"); //每2秒钟执行一次

//            Thread.sleep(10000);
//            System.out.println("【修改时间】");
//            QuartzManager.modifyJobTime(job_name,"0/10 * * * * ?");
//            Thread.sleep(20000);
//            System.out.println("【移除定时】");
//            QuartzManager.removeJob(job_name);
//            Thread.sleep(10000);
//
//            System.out.println("/n【添加定时任务】");
//            QuartzManager.addJob(job_name,job,"0/5 * * * * ?");

        }  catch (Exception e) {
            e.printStackTrace();
        }

    }

    private void log(String target, HttpServletRequest request) {
        StringBuffer sb = new StringBuffer();
        sb.append("get a request[" + target + "] ");
        for (String key : request.getParameterMap().keySet()) {
            String value = request.getParameter(key);
            if (value != null && value.length() > 300) {
                value = value.substring(0, 300) + "...";
            }
            sb.append(key).append("=").append(value).append(",");
        }
        sb.append("ip=" + request.getHeader("X-Forwarded-For"));
        //logger.info(sb.toString());
    }

}

  

/*作业类:
*/

import com.databasepool.MySqlConn;

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

import java.sql.ResultSet;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

/**
 * Created by 8899man on 16/6/20.
 */
public class CreateVmJob implements Job {

    SimpleDateFormat DateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    Date d = new Date();
    String returnstr = DateFormat.format(d);

    ThreadPoolExecutor executor = new ThreadPoolExecutor(20,Integer.MAX_VALUE , 2000, TimeUnit.MILLISECONDS,
            new ArrayBlockingQueue<Runnable>(30));

    public void execute(JobExecutionContext arg0) throws JobExecutionException {

        System.out.println(returnstr+"★★★★★★★★★★★cccccvm");

        String sql = "select * from process_vm_interface where state=‘1‘";
        MySqlConn mySqlConn = new MySqlConn();
        ResultSet rs = null;
        try {
            ArrayList<VmBean>  vbList = mySqlConn.readVmBySql(sql);

            for (int i=0;i<vbList.size();i++){

                String orderid = vbList.get(i).getOrderid();
                System.out.println("打印orderid:"+orderid);

                MyTask myTask = new MyTask(i,orderid);
                executor.execute(myTask);

                //System.out.println("线程池中线程数目:"+executor.getPoolSize()+",队列中等待执行的任务数目:"+
                  //      executor.getQueue().size()+",已执行玩别的任务数目:"+executor.getCompletedTaskCount());
            }

            executor.shutdown();

            /*int col = rs.getMetaData().getColumnCount();
            while (rs.next()) {
                rs.getString("order_id");
                for (int i = 1; i <= col; i++) {
                    System.out.print(rs.getString(i) + "\t");
                    if ((i == 2) && (rs.getString(i).length() < 8)) {
                        System.out.print("\t");
                    }
                }
                System.out.println("");
            }*/

        } catch (Exception e) {
            e.printStackTrace();
        }

        if (rs!=null){

        }

    }

}

  

/*  */package com.xx.httptest;

/**
 * Created by 8899man on 16/6/27.
 */

import java.io.*;
import java.net.HttpURLConnection;
import java.net.ProtocolException;
import java.net.URL;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.*;

import com.alibaba.fastjson.JSONObject;
import org.apache.commons.httpclient.*;
import org.apache.commons.httpclient.methods.GetMethod;

import com.alibaba.fastjson.JSON;
import org.apache.commons.httpclient.methods.HeadMethod;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.params.HttpClientParams;

public class HttpClientUtil {

    static final int VIEW_TIMEOUT = 12000;
    static final boolean VIEW_OUTPUT = true;
    static final String VIEW_METHOD = "POST";
    static final String VIEW_CHAR_CODE = "UTF-8";

    static  String BASEURL="http://localhost:8030/";
    static{
        Properties props = new Properties();
        InputStream in = null;
        try {
            in = new BufferedInputStream(new FileInputStream(
                    HttpClientUtil.class.getResource("/dbconn.properties").getFile()));
            props.load(in);
            if(props.get("BASEURL")==null){
                System.out.println("BASEURL:is null");
            }
            BASEURL= String.valueOf(props.get("BASEURL"));
            in.close();
        } catch (Exception e) {
            e.printStackTrace();
            if(in!=null)
                try {
                    in.close();
                } catch (IOException e1) {
                    e1.printStackTrace();
                }
        }

    }

    public static void test() {

        try{
            String result1 = "";
            HttpClient httpclient=new HttpClient();

            HttpClientParams hc = new HttpClientParams();
            hc.setParameter("t1","yangqing1");
            hc.setParameter("t2","yangqing2");
            httpclient.setParams(hc);

            System.out.println("打印传递的参数---------->");
            //System.out.println(htt().toString());
            String urlpath=BASEURL+"workflowapi/workflowextend";

            System.out.println(urlpath);
            GetMethod getmethod=new GetMethod(urlpath);

            int sendStatus=0;
            try {
                sendStatus=httpclient.executeMethod(getmethod);

                result1 = getmethod.getResponseBodyAsString();
            } catch (HttpException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }finally{
                //释放
                System.out.println(sendStatus);
                getmethod.releaseConnection();
            }

            System.out.println(result1);
            JSONObject obj = JSON.parseObject(result1);
            String object = obj.getString("code");

            System.out.println("打印解析------->");
            System.out.println(object);

            return;

        }catch(Exception ce){
            ce.printStackTrace();
            return;
            //return "{\"msg\": \"请求失败!\",\"status\": 500}";
        }

        /*try {

            URL url = new URL(urlpath);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setConnectTimeout(VIEW_TIMEOUT);
            connection.setDoOutput(VIEW_OUTPUT);
            connection.setRequestMethod(VIEW_METHOD);
            connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
            BufferedOutputStream out = new BufferedOutputStream(connection.getOutputStream());

            String fileMsg = "data=" + URLEncoder.encode(data, VIEW_CHAR_CODE) + "&username=" + username + "&sdns-api=" + password;
            InputStream fileInputStream = new ByteArrayInputStream(fileMsg.getBytes(VIEW_CHAR_CODE));
            byte[] bytes = new byte[1024];
            int numReadByte = 0;
            while ((numReadByte = fileInputStream.read(bytes, 0, 1024)) > 0) {
                out.write(bytes, 0, numReadByte);
            }
            out.flush();
            fileInputStream.close();
            int code = connection.getResponseCode();
            DnsCallHistoryBean dnsCallHistory = new DnsCallHistoryBean();
            if (code != 200) {
                dnsCallHistory.setMsg("访问错误,错误码" + code);
                return new TwoTuples<Integer, DnsCallHistoryBean>(code, dnsCallHistory);
            }
        }catch (Exception e){
            System.out.println(e);
        }*/

    }

    private static HttpMethod postMethod(String url) throws IOException{
        PostMethod post = new PostMethod(url);
        post.setRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=gbk");
        NameValuePair[] param = { new NameValuePair("startCity","杭州"),
                new NameValuePair("lastCity","沈阳"),
                new NameValuePair("userID",""),
                new NameValuePair("theDate","") } ;
        post.setRequestBody(param);
        post.releaseConnection();
        return post;
    }

    public static void main(String[] args){
        HttpClientUtil main = new HttpClientUtil();
        main.test();

        //HttpClient httpClient = new HttpClient();
        //HttpMethod httpMethod =  new HeadMethod();

    }

}

  

/*
   数据库连接 ,可以读取配置文件
*/

import com.xx.VmBean;

import java.sql.*;
import java.util.ArrayList;

/**
 * Created by 8899man on 16/6/20.
 */
public class MySqlConn {

    private static Connection getConn() {
        String driver = "com.mysql.jdbc.Driver";
        String url = "jdbc:mysql://localhost:3306/cmdb";
        String username = "root";
        String password = "yangqing";
        Connection conn = null;
        try {
            Class.forName(driver); //classLoader,加载对应驱动
            conn = (Connection) DriverManager.getConnection(url, username, password);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return conn;
    }

    public ArrayList<VmBean> readVmBySql(String sql) throws Exception{

            if (sql == null || "".equals(sql)) {
                return null;
            }
            Statement statement = null;
            MysqlPool mysqlPool = new MysqlPool();

            ArrayList<VmBean> arrylist  = new ArrayList<VmBean>();

            java.sql.Connection connection = mysqlPool.getConnection();
            try {
                statement = connection.createStatement();
                ResultSet rs = statement.executeQuery(sql);
                while (rs.next()) {
                    String orderid = rs.getString("order_id");
                    String state = rs.getString("state");
                    String create_id = rs.getString("create_id");

                    VmBean vb = new VmBean();
                    vb.setCrateid(create_id);
                    vb.setState(state);
                    vb.setOrderid(orderid);
                    arrylist.add(vb);
                }

            } catch (Exception e) {

                throw e;

            } finally {
                if (statement != null) {
                    statement.close();
                }
                mysqlPool.close(connection);
            }

        return arrylist;

    }

    public int updateBySql(String sql) throws Exception{

        if (sql == null || "".equals(sql))
            return 0;
        Statement statement = null;
        MysqlPool mysqlPool = new MysqlPool();
        java.sql.Connection connection = mysqlPool.getConnection();
        int rs = 0;
        try {
            statement = connection.createStatement();
            rs = statement.executeUpdate(sql);

        } catch (Exception e) {

            throw e;

        } finally {
            if (statement != null) {
                statement.close();
            }
            mysqlPool.close(connection);
        }
        return rs;

    }

    private static void getAll() {

        //Connection conn = getConn();
        MysqlPool mysqlPool = new MysqlPool();
        Connection conn = mysqlPool.getConnection();

        String sql = "select * from process_base_info";
        PreparedStatement pstmt;
        try {
            pstmt = (PreparedStatement)conn.prepareStatement(sql);
            ResultSet rs = pstmt.executeQuery();

            while(rs.next()){

                System.out.println(rs.getString("process_name") + " ");

            }

        } catch (SQLException e) {
            e.printStackTrace();
        }
        //return null;
    }

    public static void main(String[] args){

        getAll();
        getAll();

        getAll();

        getAll();

        //MySqlConn.getAll();
        /*String sql = "select * from process_base_info";
        try {
            MySqlConn mySqlConn = new MySqlConn();
            mySqlConn.readBySql(sql);
        } catch (Exception e) {
            e.printStackTrace();
        }*/

        /*String sql ="update process_base_info set introduce=‘8888‘ where process_id=3";
        MySqlConn mySqlConn = new MySqlConn();
        try {
            int k = mySqlConn.updateBySql(sql);
            System.out.println("更新记录:"+k);
        } catch (Exception e) {
            e.printStackTrace();
        }*/
    }

}

  

/*
   连接池,可以参考commons pool 对象池开源实现
*/

import org.apache.commons.dbcp.BasicDataSource;
import org.apache.log4j.Logger;

import java.sql.Connection;

public class MysqlPool {
    protected final Logger logger = Logger.getLogger(MysqlPool.class);
    private static BasicDataSource ds = null;
    //private ConnPoolParamEnum connPoolParamEnum;
    private String validationQuery = "select 1";

    private String usename = "root";
    private String password = "yangqing";
    private String url = "jdbc:mysql://localhost:3306/cmdb";
    private String driver = "com.mysql.jdbc.Driver";

    public MysqlPool(){

    }

    public MysqlPool(String url, String username, String password, String driverClass) {
        this.url = url;
        this.usename = username;
        this.password = password;
        this.driver = driverClass;
        //connPoolParamEnum = ConnPoolParamEnum.get(dbtype, project);
        init();
    }

    private void init() {
        ds = new BasicDataSource();
        ds.setDriverClassName(driver);
        ds.setUsername(usename);
        ds.setPassword(password);
        ds.setUrl(url);
        ds.setInitialSize(20);
        ds.setMaxActive(100);
        ds.setMaxIdle(80);
        ds.setMinIdle(20);
        ds.setMaxWait(5000);
        ds.setTestOnBorrow(true);
        ds.setValidationQuery(validationQuery);
        logger.info("init connection pool[" + url + "]");
        System.out.println("init connection pool");
    }

    public synchronized Connection getConnection() {
        if (ds == null)
            init();
        Connection connection = null;
        try {
            connection = ds.getConnection();
            logger.info("get a connection from pool [" + url + "],idle connection[" + ds.getNumIdle() + "]");
        } catch (Exception e) {
            logger.error(e);
        }
        return connection;
    }

    public void close(Connection connection) {
        if (connection != null) {
            try {
                connection.close();
                logger.info("release a connection to pool [" + url + "],idle connection[" + ds.getNumIdle() + "]");
            } catch (Exception e) {
                logger.error(e);
            }
        }
    }
}

 

/*
   MyTask任务 _多线程传参方式,可以参考另外一篇文章,多线程传参数
*/

/**
 * Created by yq on 16/6/16.
 */
public class MyTask implements Runnable{

    private int taskNum;
    private String orderid;
  /*构造函数传参数*/
    public MyTask(int num,String orderid) {
        this.taskNum = num;
        this.orderid = orderid;
    }

    //@Override
    public void run() {
        System.out.println("正在执行task "+taskNum);
        try {
            Thread.currentThread().sleep(10000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("task "+taskNum+"执行完毕,单号——>"+orderid);
    }

}

  POM.XML文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>lsquartz</groupId>
    <artifactId>lingshuquartz</artifactId>
    <version>1.0-SNAPSHOT</version>

    <name>com.lingshu.quartz</name>
    <url>http://maven.apache.org</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <springframework.version>3.0.5.RELEASE</springframework.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.eclipse.jetty</groupId>
            <artifactId>jetty-server</artifactId>
            <version>9.2.14.v20151106</version>
        </dependency>
        <!--Json-->
        <dependency>
            <groupId>org.json</groupId>
            <artifactId>json</artifactId>
            <version>20090211</version>
        </dependency>
        <!--phoenix-->

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.3.6</version>
        </dependency>
        <!--mysql-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.38</version>
        </dependency>
        <!--file upload-->
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.3.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpmime</artifactId>
            <version>4.5.1</version>
        </dependency>

        <dependency>
            <groupId>org.quartz-scheduler</groupId>
            <artifactId>quartz</artifactId>
            <version>1.8.5</version>
        </dependency>

        <!-- http://mvnrepository.com/artifact/org.jdom/jdom -->
        <!--<dependency>
            <groupId>org.jdom</groupId>
            <artifactId>jdom</artifactId>
            <version>1.1.3</version>
        </dependency>-->

        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-pool2</artifactId>
            <version>2.2</version>
        </dependency>
        <dependency>
            <groupId>commons-lang</groupId>
            <artifactId>commons-lang</artifactId>
            <version>2.5</version>
        </dependency>
        <dependency>
            <groupId>commons-dbcp</groupId>
            <artifactId>commons-dbcp</artifactId>
            <version>1.4</version>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
        <dependency>
            <groupId>commons-httpclient</groupId>
            <artifactId>commons-httpclient</artifactId>
            <version>3.1</version>
        </dependency>
        <dependency>
            <groupId>net.sf.json-lib</groupId>
            <artifactId>json-lib</artifactId>
            <version>2.4</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.3</version>
        </dependency>

        <!--<dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.3.6</version>
        </dependency>-->

    </dependencies>

    <build>
        <finalName>${project.artifactId}</finalName>
        <plugins>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <version>2.4</version>
                <executions>
                    <execution>
                        <id>copy-dependencies</id>
                        <phase>package</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>${project.build.directory}/lib</outputDirectory>
                            <overWriteReleases>false</overWriteReleases>
                            <overWriteSnapshots>false</overWriteSnapshots>
                            <overWriteIfNewer>true</overWriteIfNewer>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>2.4</version>
                <configuration>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <classpathPrefix>lib/</classpathPrefix>
                            <mainClass>com.xx.QuartzTest</mainClass>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <!--<properties>
        <springframework.version>3.0.5.RELEASE</springframework.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${springframework.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
            <version>${springframework.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>${springframework.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>${springframework.version}</version>
        </dependency>
        <dependency>
            <groupId>org.quartz-scheduler</groupId>
            <artifactId>quartz</artifactId>
            <version>1.8.5</version>
        </dependency>

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.4</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.0</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${springframework.version}</version>
        </dependency>

    </dependencies>

    <build>
        <finalName>${project.artifactId}</finalName>

        <plugins>
            <plugin>
                <groupId>org.mortbay.jetty</groupId>
                <artifactId>jetty-maven-plugin</artifactId>
                <version>8.1.9.v20130131</version>
                <configuration>
                    <scanIntervalSeconds>0</scanIntervalSeconds>
                    <connectors>
                        <connector implementation="org.eclipse.jetty.server.nio.SelectChannelConnector">
                            <port>8000</port>
                        </connector>
                    </connectors>
                </configuration>
            </plugin>

        </plugins>
    </build>-->

</project>

  

 

时间: 2024-07-29 00:04:26

连接池、线程池、定时任务、应用启动的相关文章

android线程与线程池-----线程池(二)《android开发艺术与探索》

android 中的线程池 线程池的优点: 1 重用线程池中的线程,避免了线程的创建和销毁带来的性能开销 2 能有效的控制最大并发数,避免大量线程之间因为喜欢抢资源而导致阻塞 3 能够对线程进行简单的管理,提供定时执行以及指定间隔时间循环执行等 android 中的线程池源自java 中的Executor,Executor是一个接口,正真的实现是ThreadPoolExecutor. ThreadPoolExecutor 提供参数配置线程池. 下面是一个常用的构造方法: public Threa

并发编程---线程queue---进程池线程池---异部调用(回调机制)

线程 队列:先进先出 堆栈:后进先出 优先级:数字越小优先级越大,越先输出 import queue q = queue.Queue(3) # 先进先出-->队列 q.put('first') q.put(2) # q.put('third') # q.put(4) #由于没有人取走,就会卡主 q.put(4,block=False) #等同于q.get_nowait(), Ture 阻塞,Flase不阻塞,报异常满了 # # q.put(4,block=True,timeout=3) prin

进程池/线程池/协程

导入进程池线程池模块@@ from concurrent import ProcessPoolExecutor,ThreadPoolExecutor 同步提交,异步提交@@ from concurrent import ProcessPoolExecutor,ThreadPoolExecutorimport osdef foo(name): print('进程%s,进程号为%s'%(name,os.getpid())) return os.getpid() if __nmae__=='__mai

Python3 从零单排28_线程队列&amp;进程池&amp;线程池

1.线程队列 线程队列有三种:先进先出,后进先出,按优先级进出,具体如下: 1 import queue 2 3 # 先进先出 4 q = queue.Queue(3) 5 6 q.put(1) 7 q.put(2) 8 q.put(3) 9 # q.put(4) # 再放阻塞,等待队列消费 10 # q.put(4,block = False) # 不阻塞,强制放数据,如果满的情况下直接报错 等价与 q.put_nowait(4) 11 # q.put(4,block = True) # 阻塞

进程池线程池 协程

socket服务端实现并发 服务端需要满足以下3点: 1 固定的ip和port 2 24小时提供服务 3 能够实现并发 多线程实现并发: 服务端: import socket from threading import Thread import os server = socket.socket() server.bind(('127.0.0.1',8080)) server.listen(5) #半连接池 def communicate(conn): while True: try: dat

Python并发编程05/ 死锁/递归锁/信号量/GIL锁/进程池/线程池

目录 Python并发编程05/ 死锁/递归锁/信号量/GIL锁/进程池/线程池 1.昨日回顾 2.死锁现象与递归锁 2.1死锁现象 2.2递归锁 3.信号量 4.GIL全局解释器锁 4.1背景 4.2为什么加锁 5.GIL与Lock锁的区别 6.验证计算密集型IO密集型的效率 6.1 IO密集型 6.2 计算密集型 7.多线程实现socket通信 7.1服务端 7.2客户端 8.进程池,线程池 Python并发编程05/ 死锁/递归锁/信号量/GIL锁/进程池/线程池 1.昨日回顾 #生产者消

进程池线程池

进程池,线程池 什么是池 # 要在程序开始的时候,还没提交任务先创建固定数量的进程或线程 放在一个池子里,这就是池 为什么要用池? # 如果先开好进程/线程,那么有任务之后就可以直接使用这个池中的数据了 # 并且开好的线程或者进程会一直存在在池中 处理完毕进程并不关闭,可以被多个任务反复利用 # 这样极大的减少了开启\关闭\调度线程/进程的时间开销 # 池中的线程/进程个数控制了操作系统需要调度的任务个数,控制池中的单位 # 有利于提高操作系统的效率,减轻操作系统的负担 开启一个池 from c

GIL全局解释器锁和进程池.线程池

GIL全局解释器锁 GIL本质就是一把互斥锁,是夹在解释器身上的,同一个进程内的所有线程都需要先抢到GIl锁,才能执行解释器代码 GIL的优缺点: 优点:保证Cpython解释器内存管理的线程安全 缺点:同一个进程内所有的线程同一时刻只能有一个执行,也就是说Cpython解释器的多线程无法实现并行,无法取得多核优势 GIL与单线程 每个进程的内存空间中都有一份python解释器的代码,所以在单线程的情况下,GIL锁没有线程争抢,只有垃圾回收机制线程会定时获取GIL权限 GIL与多线程 有了GIL

9-[多线程] 进程池线程池

1 # 进程池,线程池 from concurrent.futures import ProcessPoolExecutor, ThreadPoolExecutor import os import time def task(name): print('%s is running <pid: %s>' % (name, os.getpid())) time.sleep(2) if __name__ == '__main__': # p = Process(target=task, args=

(并发编程)进程池线程池--提交任务的2种方式、协程--yield greenlet,gevent模块

一:进程池与线程池(同步,异步+回调函数)先造个池子,然后放任务为什么要用"池":池子使用来限制并发的任务数目,限制我们的计算机在一个自己可承受的范围内去并发地执行任务池子内什么时候装进程:并发的任务属于计算密集型池子内什么时候装线程:并发的任务属于IO密集型 #提交任务的两种方式:    # 同步调用:提交完一个任务之后,就在原地等待,等待任务完完整整地运行完毕拿到结果后,再执行下一行代码,会导致任务是串行执行的    # 异步调用:提交完一个任务之后,不在原地等待,结果???,而是