仿照之前自己写的一个perl的多线程的脚本,简单试了下python的多线程模块threading.只能说因为之前习惯了perl的很多用法,刚切换到python非常不习惯,一些小的操作上不熟练.

#!/usr/bin/env python
import threading
import time
import random
import sys
import string
def fun_test(x):
sleep_time=random.random()*1
print "args is %s sleep time is %.4f s" % (x,sleep_time)

    time.sleep(sleep_time) def multi_do(lists,concurrent_max,func):     concurrent=0     thread_list=set()     while( len( lists ) > 0 ):         if len(thread_list) <= concurrent_max:             ser=lists.pop()             pid=threading.Thread(target=func,name=ser,args=(ser,))             thread_list.add(pid)             pid.start()         else:

alive_threads=set(threading.enumerate())

            join_threads=thread_list-alive_threads             for job in join_threads:                 print “%s is done”% job.getName()                 job.join()                 thread_list.remove(job)     while(len(thread_list)>0):         alive_threads=set(threading.enumerate())         join_threads=thread_list-alive_threads         for job in join_threads:             print “%s is done”% job.getName()             job.join()             thread_list.remove(job)     print “all job have been done” if name == “main”:     try:         fd=open(sys.argv[1],“r”)         print “open %s ok” % sys.argv[1]         todo_list=fd.readlines()

todo_list=map(lambda x: x.strip(),todo_list)

        print “to do is:\n”,"\n".join(todo_list)     except IOError:         print “open file failed”     fd.close()     multi_do(todo_list,10,fun_test)