美文网首页
python与shell多线程区别

python与shell多线程区别

作者: LEUNGJH | 来源:发表于2019-02-11 18:30 被阅读0次

    分别用python和shell写一个多线程脚本执行1~6.sh脚本(多线程数设置为 2),6个脚本执行耗时不一样,可以得出结论:

    shell多线程的线程之间互不阻塞,python多线程的线程之间互相阻塞。

    1、python多线程

    #!/usr/bin/env python

    import os

    from multiprocessing import Pool

    _pool = Pool(processes = 2)

    for i in range(1,7):

            a = os.system('sh /data/.trash/%s.sh' %i)

            print(i)

    _pool.close()

    _pool.join()

    2、shell多线程

    #!/bin/bash

    start_time=`date +%s`              #定义脚本运行的开始时间

    [ -e /tmp/fd1 ] || mkfifo /tmp/fd1 #创建有名管道

    exec 3<>/tmp/fd1                  #创建文件描述符,以可读(<)可写(>)的方式关联管道文件,这时候文件描述符3就有了有名管道文件的所有特性

    rm -rf /tmp/fd1                    #关联后的文件描述符拥有管道文件的所有特性,所以这时候管道文件可以删除,我们留下文件描述符来用就可以了

    for ((i=1;i<=2;i++))

    do

            echo >&3                  #&3代表引用文件描述符3,这条命令代表往管道里面放入了一个"令牌"

    done

    for ((i=1;i<=6;i++))

    do

    read -u3                          #代表从管道中读取一个令牌

    {

            /bin/bash /data/.trash/$i.sh

            echo 'success'$i     

            echo >&3                  #代表我这一次命令执行到最后,把令牌放回管道

    }&

    done

    wait

    stop_time=`date +%s`  #定义脚本运行的结束时间

    echo "TIME:`expr $stop_time - $start_time`"

    exec 3<&-                      #关闭文件描述符的读

    exec 3>&-                      #关闭文件描述符的写

      本文只在特定环境测试,如有争议的地方欢迎指正哈!

    相关文章

      网友评论

          本文标题:python与shell多线程区别

          本文链接:https://www.haomeiwen.com/subject/gxtceqtx.html