python与shell多线程区别

分别用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多线程区别)